https://javabetter.cn/jvm/whereis-the-object.html

经过前面章节的学习,详细大家都知道了,Java 的对象是在堆中创建的,但堆又分为新生代和老年代,新生代又细分为 Eden、From Survivor、To Survivor。那我们创建的对象到底在哪里

Untitled

其实这部分内容我们在讲垃圾回收机制的时候提到过了,但没有细讲,这次我们就来详细讲讲。

对象优先在 Eden 分配

堆分为新生代和老年代,新生代用于存放使用后就要被回收的对象(朝生夕死),老年代用于存放生命周期比较长的对象。

我们创建的大部分对象,都属于生命周期较短的对象,所以会存放在新生代。新生代有细分 Eden、From Survivor、To Survivor,那我们创建的对象会优先在 Eden 区分配,见下图。

Untitled

随着对象的不断创建,Eden 剩余地内存空间就会越来越少,随后就会触发 Minor GC,于是 JVM 会把 Eden 区存活的对象转入 From Survivor 空间。

Minor GC 后,又创建的新对象会继续往 Eden 区分配。

Untitled