Java的堆是如何分代的?为什么分代
Java的堆内存分代是指将不同生命周期的堆内存对象存储在不同的堆内存区域中,==这里的不同的堆内存区域被定义为“代”==。这样做有助于提升垃圾回收的效率,因为这样的话就可以为不同的”代”设置不同的回收策略。
一般来说, Java 中的大部分对象都是朝生夕死的,同时也有一部分对象会持久存在。如果把这两部分对象放在一起分析和回收,效率太低。因此 通过将不同时期的对象存放在不同的内存池中,就可以节省宝贵的时间和空间,从而改善性能
Java 的堆由 新生代(Young Generation) 和老年代(Old Generation)组成。新生代存放新分配的对象,老年代存放长期存在的对象
很多的对象都会出现在 Eden
区,当 Eden
区的内存容量用完的时候,会发起 GC
,非存活对象会被标记为死亡,还存活的对象被移动到 Survivor
区
如果 Survivor
的内存容量也用完了,那么存活对象会被移动到老年代
老年代 Old
是对象存活时间最长的部分,它由单一存活区组成,并且把经历过若干轮 GC
回收还存活的对象移动而来。在老年代中,大部分对象都是活了很久的,所以 GC
回收他们会很慢
- Title: Java的堆是如何分代的?为什么分代
- Author: cccs7
- Created at : 2025-04-07 21:45:00
- Updated at : 2025-04-07 22:37:05
- Link: https://cs7eric.github.io/2025/04/07/Java的堆是如何分代的?为什么分代/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments