鍍金池/ 問答/Java/ 所有JVM的堆都有年輕代、老年代嗎?

所有JVM的堆都有年輕代、老年代嗎?

如題,是使用分代收集算法GC的JVM,堆分年輕代和老年代,
還是不管使用的哪種GC算法,堆都分年輕代和老年代?

回答
編輯回答
涼心人

Java虛擬機(jī)規(guī)范里面并沒有對GC給出任何定義,也不對堆進(jìn)行分類,因此,從理論上來說,是否分年輕代和老年代并不是一定的。

2017年3月12日 03:37
編輯回答
久不遇

jvm標(biāo)準(zhǔn)對GC幾乎沒有具體要求

2017年6月8日 13:15
編輯回答
我甘愿

引用《深入理解Java虛擬機(jī)》中的話:
首先,Java虛擬機(jī)規(guī)范中對垃圾收集器應(yīng)該如何實(shí)現(xiàn)并沒有任何規(guī)定。

當(dāng)前商業(yè)虛擬機(jī)的垃圾收集都采用“分代收集”(Generational Collection)算法,這種算法并沒有什么新的思想,只是根據(jù)對象存活周期的不同將內(nèi)存劃分為幾塊。一般是把Java堆分為新生代和老年代,這樣就可以根據(jù)各個(gè)年代的特點(diǎn)采用最適當(dāng)?shù)氖占惴ā?p>不過無論如何劃分,都與存放內(nèi)容無關(guān),無論哪個(gè)區(qū)域,存儲的都仍然是對象實(shí)例,進(jìn)一步劃分的目的是為了更好地回收內(nèi)存,或者更快地分配內(nèi)存。

也就是說分代收集是目前找到的能更好地回收內(nèi)存,或者更快地分配內(nèi)存的最佳方案。
其中介紹的幾款 GC 全部是基于分代收集的(包括 G1),對于介紹的幾種垃圾收集算法(標(biāo)記-清除、復(fù)制、標(biāo)記-整理)在分代收集下會有更高的效率。

2018年7月4日 07:17