深入理解Java虚拟机(四)内存分配与回收策略

8. 内存分配与回收策略

深入理解Java虚拟机(四)内存分配与回收策略

  • 内存分配:

    • 堆内存分为新生代和老年代(默认1:2)
    • 新生代分为两部分:伊甸区和幸存区(幸存0区,幸存1区)(默认8:1:1);
  • 回收策略:

    • 新建对象优先在新生代Eden区分配;

    • 大的对象直接放在老年代;

    • Eden区空间不够时会发生Minor GC:

      Minor GC的过程:复制—>清空—>互换

      • Eden区满时触发第一次Minor GC,活着的对象拷贝到SurvivorFrom区;
      • Eden区再次满时,再次触发Minor GC,将Eden区和From区活着的对象拷贝至To区,同时把这些对象的年龄+1;
      • 清空Eden和From区,将From区与To区互换;
      • 若一个对象(默认)交换15次后依旧存活,进入老年代。(年龄参数 MaxTenuringThreshold决定)
    • 老年代内存满时Full GC