簡體   English   中英

了解java中的內存分配和GC

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM