一、摘要
在之前的文章中,我们介绍了类加载的过程、JVM 内存布局和对象的创建过程相关的知识。
本篇综合之前的知识,重点介绍一下对象的内存分配流程。
二、对象的内存分配原则
在之前的 JVM 内存结构布局的文章中,我们介绍到了 Java 堆的内存布局,由 年轻代 (Young Generation) 和老年代 (Old Generation) 组成,默认情况下按照1 : 2
的比例来分配空间。
其中年轻代又被划分为三个不同的区域:Eden 区、From Survivor 区、To Survivor 区,默认情况下按照8 : 1 : 1
的比例来分配空间。
Java 堆的内存布局,可以用如下图来概括。
当创建的对象不再被使用了是需要被回收掉的,以便腾出空间给新的对象使用,这就是对象的垃圾回收,也就是对象的 GC,我们会在后续的文章中再次介绍对象的垃圾回收算法以及垃圾收集器。
本次我们重点介绍下,创建不同大小的对象,在堆空间中发生的内存分配变化,以便后续更好的理解 GC 调优过程。
2.1、对象优先分配在 Eden 区
默认情况下,创建的对象会优先分配在年轻代的 Eden 区,当 Eden 区不够用的时候,会触发一次 Minor GC。
什么是 Minor GC 呢?
Minor GC 指的是 JVM 发生在年轻代的垃圾回收动作