JVM:细节拓展

上次我们说到了堆主要存在对象和数组,实际上,在堆中还有更细节的分代划分。GC算法也是基于分代划分来回收的。

  • 新生代Young:新创建的对象(大多数对象都是朝生夕死,生命周期很短)
    • Eden
    • SurvivorFrom
    • SurvivorTo
      默认E:S0:S1 = 8 :1 :1
  • 老年代Old
    • 对象优先分配在Young区的eden区
    • 新对象特别大,直接进入老年代
    • 新生代中年龄超过15岁的进入老年代(一次垃圾回收加一岁)
    • 动态对象年龄:survivor空间中相同对象年龄所有对象大小总和大于survivor空间的一半,大于等于该年龄的对象可以直接进入老年代
    • 担保机制:在发生Minor GC之前,虚拟机会先检查老年代最大可用的连续空间是否大于新生代所有对象总空间。如果这个条件成立,那么Minor GC可以确保是安全的。如果不成立,则虚拟机会查看HandlerPromotionFailure设置是否允许担保失败。如果允许,那么会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小。如果大于,将尝试着进行一次Minor GC,尽管这次GC是有风险的。如果小于,或者HandlerPromotionFailure设置不允许冒险,那这时也要改为进行一次Full GC了。假如担保失败则要重新发起FullGC。

元空间

存储类对象信息

JVM参数 //TODO

  • 堆最大值
  • 堆最小值
  • 方法区最大值
  • 栈深度大小
原文地址:https://www.cnblogs.com/fcb-it/p/13341970.html