所有JVM的堆都有年轻代、老年代吗?

如题,是使用分代收集算法GC的JVM,堆分年轻代和老年代,
还是不管使用的哪种GC算法,堆都分年轻代和老年代?

阅读 3.8k
3 个回答

引用《深入理解Java虚拟机》中的话:
首先,Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定。

当前商业虚拟机的垃圾收集都采用“分代收集”(Generational Collection)算法,这种算法并没有什么新的思想,只是根据对象存活周期的不同将内存划分为几块。一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法。

不过无论如何划分,都与存放内容无关,无论哪个区域,存储的都仍然是对象实例,进一步划分的目的是为了更好地回收内存,或者更快地分配内存。

也就是说分代收集是目前找到的能更好地回收内存,或者更快地分配内存的最佳方案。
其中介绍的几款 GC 全部是基于分代收集的(包括 G1),对于介绍的几种垃圾收集算法(标记-清除、复制、标记-整理)在分代收集下会有更高的效率。

jvm标准对GC几乎没有具体要求

Java虚拟机规范里面并没有对GC给出任何定义,也不对堆进行分类,因此,从理论上来说,是否分年轻代和老年代并不是一定的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题