[英]Understanding memory allocation and GC in java
我試圖了解垃圾收集算法的工作原理。 我正在讀這篇文章 。 據我所知,每一個分配都發生在Young一代 。 如果沒有足夠的可用空間,則會觸發Minor GC
以清潔Young代(Eden,S1,S2)。 但現在想象我們有一些類:
public class TestYoungCrash{
private long l1;
private long l2;
//...
private long l100000000;
//tons of other fields
}
所以即使這一代人完全清楚,班級的目標也不適合年輕一代。
那會發生什么? 它是標准化的嗎?
不可能有一個需要如此大量內存的對象。 但不是因為內存限制,而是出於更實際的原因--JVM限制了每個類的字段數,請參見此處 :
可以由類或接口聲明的字段數量被ClassFile結構(第4.1節)的fields_count項的大小限制為65535。
你班上不能有這么多字段會炸掉你的記憶。 我很確定:如果你創建一個堆如此小的JVM,以至於包含那些65535長字段的單個對象不適合...... JVM很可能甚至都不會啟動。
從這個意義上說,我們可以將你的問題改寫為:當我創建一個太大而不適合提供給JVM的堆空間的數組時會發生什么? 然后你基本上回到了這個問題 ......其中說: OutOfMemoryError 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.