如果我從我的程序(非守護進程)創建一個守護進程線程,是與新線程共享的堆和perm守內存空間還是重新分配?Java守護進程線程是否與生成進程共享堆或者Perm Gen?
如果守護進程線程獲取自己的空間,JVM內存調優參數如最大堆大小等是否在創建新線程時受到尊重?
如果我從我的程序(非守護進程)創建一個守護進程線程,是與新線程共享的堆和perm守內存空間還是重新分配?Java守護進程線程是否與生成進程共享堆或者Perm Gen?
如果守護進程線程獲取自己的空間,JVM內存調優參數如最大堆大小等是否在創建新線程時受到尊重?
是與新線程共享的堆和perm gen內存空間還是重新分配?
所有線程(守護進程狀態無關緊要)共享堆和perm內存空間。每個線程都有它自己的堆棧空間,它用來存儲方法字段和調用堆棧。您可以通過changing JVM arguments調整分配的每個線程堆棧空間的大小。但即使這些堆棧區域也是通用JVM堆空間的一部分。
當線程在單獨的CPU中運行時,線程也具有內存緩存。每CPU內存緩存用於性能方面的原因,因此可以出於速度原因更新本地CPU內存,而無需將信息同步到每次訪問的中央存儲。但是這些緩存仍然從一般的JVM內存空間讀取和寫入。
有關守護程序線程真正含義的更多信息,請參見@Peter's answer。
守護進程線程和普通線程之間的唯一顯着區別是它是否會阻止進程停止。普通線程保持JVM運行,守護進程不會。
守護線程具有
BTW:其他的差異是迂腐,
true
接受答案,但我無法驗證其正確性。謝謝,這就是我需要知道的! –
@Josh Harness:很容易驗證它:只讀線程。幾乎任何介紹性的線程文本都會告訴你上述情況。 +1 btw。 – Tudor
你也可以使用['Thread(ThreadGroup,Runnable,String,long)'](http://docs.oracle.com/javase/6/docs/api/java/lang/Thread)動態地改變堆棧大小。 html#線程%28java.lang.ThreadGroup,%20java.lang.Runnable,%20java.lang.String,%20long%29)構造函數。對於可能會深入的進程很有幫助,但您不希望因線程太多而導致出現OutOfMemoryError問題。**編輯:**使用此時請注意可能的平臺特定問題。 – Brian