Java内存管理小总结

JVM堆内存分代区域与大小比例

注:常用比例

区域    eden    survivor1    survivor2    tenured
比例    8       1            1
        --------young-----------------    --old--
                1                         2

堆内存分代管理

  • 垃圾回收算法
    eden —> Mark-Sweep 标记清除
    survivor —> Copying 复制
    tenured —> Mark-Compact 标记压缩

  • 小的对象 —> eden区

    1. —> 一次垃圾回收后, 如果没被回收 —> survivor1区
    2. —> 一次垃圾回收后, 如果没被回收 —> survivor2区
    3. —> 一次垃圾回收后, 如果没被回收 —> survivor1区
    4. —> 一直这样交替循环, 如果长时间没被回收 —> old区
  • 大的对象 —> old区

    1. —> old区满了—> Full GC
    2. —> 空间仍然不足 —> java.lang.OutOfMemoryError: Java heap space

内存中建立一个对象的过程

注:默认开启栈优化、线程本地优化

  1. new Object(), 先到栈建对象
  2. —> 如果空间不足, 再到Thread Local(它在eden区有自己的独立空间)
  3. —> 如果还是不足, 判断对象是否比较大
    • |------> 大的放old区(如果old放不下, 那就放eden)
    • |------> 小的放eden区

你可能感兴趣的:(Java)