2012-02-16 256 views
1

我在說UseParNewGC。我對java gc minor集合的理解是這樣的。當,JVM發現伊甸園已滿(或者無法satify分配請求)什麼原因導致java minor gc

  1. 它停止所有應用程序線程
  2. 計算在伊甸園和一個生存空間的活動對象,並將其移動到另一個
  3. 如果沒有爲移動足夠的空間,或者如果在倖存者中的對象都老了,夠了,但它確實晉升到老根。
  4. 商標伊甸園和清潔倖存者爲空
  5. 恢復應用程序的線程。

的是完全正確?即使伊甸園未滿,是否會觸發小gc?

+0

伊甸和始發倖存者空間被排空,他們不只是標記爲空的,它們與空值覆蓋(或一些其它更合適的值)。 – Erik 2012-02-17 08:34:48

回答

1

我覺得你有權利過程。有些情況下,除了完整的eden空間之外,還有其他原因觸發了主要GC,例如致電System.gc()或RMI。在這種情況下,小型GC也將運行。

+0

我其實只是在詢問關於小gc的問題。 PS:我沒有system.gc調用或RMI。 – 2012-02-17 16:53:18

+0

除了列出的規則之外,一些JVM實現可能決定增長年輕一代,而不是執行次要集合,或者除了執行次要集合之外。此外,伊甸園定義爲「完整」可能取決於具體情況或可以通過虛擬機參數進行調整。這些規則有時非常複雜,對於Sun/Oracle JVM,如果您篩選長文檔,可以在此處找到一些詳細信息:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523。 HTML – 2012-02-24 18:29:09

0

當,jvm檢測到伊甸園已滿(或無法滿足分配請求) 在某種程度上,是的。但它會動態調整世代的大小以滿足收藏家的某些目標。主要是暫停時間和在GC中花費的CPU時間的一小部分。

所以間接地實現這些目標規定的集合多久輕微的發生。主要藏品在運行之前可能會觸發一個小集合,以減少從短命的年輕人那裏引用舊物件。

相關問題