天天看點

Java工程師必知詞彙:堆

|名詞定義|

堆是Java為類對象的記憶體配置設定工作所設定的一種運作時資料區,是一種通用性的記憶體池(也存在于RAM中),用于存放所有的JAVA對象。

應用程式在運作中所建立的所有類執行個體或者數組都放在堆中,并由應用所有的線程共享。Java的對象通過new、newarray、anewarray和multianewarray等指令在堆中建立記憶體空間,它們在堆中不需要程式代碼顯式釋放,而是由垃圾回收來負責的,堆的優勢是可以動态地配置設定記憶體大小,生存期也不必事先告訴編譯器,因為它是在運作時動态配置設定記憶體的,Java的垃圾收集器會自動收走這些不再使用的資料。但缺點是,由于是在運作時動态配置設定記憶體,存取速度較慢。

堆記憶體:儲存的是對象的具體資訊,在程式中堆記憶體空間的開辟是通過new完成的;

堆分區内容

1.存儲的全是對象,每個對象都包含一個與之對應的class資訊(我們常說的類類型,Clazz.getClass()等方式擷取),class目的是得到操作指令。

2.JVM隻有一個堆區(heap)被所有線程共享,堆中不存放基本類型和對象引用,隻存放對象本身。【這裡的‘對象’不包括基本資料類型】

特點

可以動态地配置設定記憶體大小、比較靈活,生存期也不必事先告訴編譯器,Java的垃圾收集器會自動收走這些不再使用的資料。在堆中配置設定的記憶體,由Java虛拟機的自動垃圾回收器來管理。

|參考資料|

[1]

https://www.jianshu.com/p/bfa5337ef59e

[2]

https://blog.csdn.net/jianesrq0724/article/details/80309690