第十二节:Java创建的对象到底放在哪?
经过前面章节的学习,详细大家都知道了,Java 的对象是在堆中创建的,但堆又分为新生代和老年代,新生代又细分为 Eden、From Survivor、To Survivor。那我们创建的对象到底在哪里?
其实这部分内容我们在讲垃圾回收机制的时候提到过了,但没有细讲,这次我们就来详细讲讲。
对象优先在 Eden 分配
堆分为新生代和老年代,新生代用于存放使用后就要被回收的对象(朝生夕死),老年代用于存放生命周期比较长的对象。
我们创建的大部分对象,都属于生命周期较短的对象,所以会存放在新生代。新生代又细分 Eden、From Survivor、To Survivor,那我们创建的对象会优先在 Eden 区分配,见下图。
随着对象的不断创建,Eden 剩余地内存空间就会越来越少,随后就会触发 Minor GC,于是 JVM 会把 Eden 区存活的对象转入 From Survivor 空间。
Minor GC 后,又创建的新对象会继续往 Eden 区分配。
于是,随着新对象的创建,Eden 的剩余内存空间就会越来越少,又会触发 Minor GC,此时,JVM 会对 Eden 区和 From Survivor 区中的对象进行存活判断,对于存活的对象,会转移到 To Survivor 区。
真诚点赞 诚不我欺
回复