2017-10-11 48 views
3

我想了解grabage collection算法的工作原理。我正在讀這個article。據我瞭解,每個撥款正在發生年輕一代。如果沒有足夠的可用空間Minor GC觸發清理年輕一代(伊甸,S1,S2)。但現在想象一下,我們有一些像類:瞭解java中的內存分配和GC

public class TestYoungCrash{ 
    private long l1; 
    private long l2; 
    //... 
    private long l100000000; 
    //tons of other fields 
} 

因此類的對象不適合年輕一代,即使產生是完全清楚。

那會發生什麼?它是標準化的嗎?

回答

5

不可能有一個對象需要這麼大的內存。但不是因爲內存的限制,但對於一個更實際的原因 - JVM限制每個類的字段數,看here

可以通過類或接口聲明的字段的數量限制爲65535由ClassFile結構(§4.1)的fields_count項的大小決定。

你不能在你的班級有太多的領域,你會炸燬記憶。我非常確定:如果你啓動一個JVM的堆很小,以至於包含這些65535長字段的單個對象不適合...... JVM很可能不會啓動。

從這個意義上說,我們可以將您的問題改爲類似於:當我創建的數組太大而無法放入提供給JVM的堆空間時會發生什麼?然後你基本上回到這個question ......裏面寫着:OutOfMemoryError

+0

我們可以調整年輕一代,不是嗎? –

+0

聽起來合理,實際上。謝謝。 –

+0

非常歡迎;-) – GhostCat