JVM(二:堆的生命周期)

因为找视频耽误了点时间,现在补一下jvm的后续内容以作记录

堆:大部分的对象创建都是在“”中生成的,今天就来详细跟进一下堆;

目录

结构:

生命周期:

        1.对象创建优先放入Eden区内

        2.当我们再往放满对象的Eden区中继续放对象的时候

        3. 当Eden区再次放满的时候

         4.当“老年代”放满对象的时候

        5.当“老年代”执行Full GC 都无法清空对象,并且已经放满的时候


结构:

        

生命周期:

        1.对象创建优先放入Eden区内

        (若此时Eden区已经放满了对象,那么会触发minor gc

        2.当我们再往放满对象的Eden区中继续放对象的时候

        java底层的“字节码执行引擎”会开启一个垃圾收集线程,对Eden区中的垃圾对象进行收集,把他们清理掉,从而空出更多的空间,让新的对象放入进来

        (minor gc的执行机制:“可达性分析算法”

                GC Roots :线程栈的本地变量、静态变量、本地方法栈的变量等,都称为GC Roots 根             节点 

                过程:先从栈、方法区中找到GC Roots  从这些根节点出发,去找有引用的对象,继续找              该对象的成员变量引用的其他对象,如此循环,直到最后一个对象中不再引用其他对象。             凡是这些一条关联的对象都会标记为“非垃圾对象”,会将这些非垃圾对象移至“Survivor区”             (Survivor区共有两块区域)中。

                此时 Eden区中剩余的对象就是垃圾对象,就会一次性干掉。

         这里插入两个个jvm的调优工具:jvisualvm/arthas

        

        )

        3. 当Eden区再次放满的时候

        就会再次执行minor gc,执行上述过程,将Eden区和非空的Survivor区中放满的“非垃圾对象”放入到另外一块空的“Survivor区”中,再将刚才两块的区域清空。

         分代年龄:每当对象被执行过一次minnor gc被保留下来,他的分代年龄会加1

         分代年龄是放在对象的对象头中的(ObjectHeader)此 处留下 后面再进行学习。 

         当分代年龄达到15的时候,该对象会被放入到“老年区”。(例如线程池对象,数据               库连接池对象、自己生成的缓存对象等等都会放到“老年区”)

         4.当“老年代”放满对象的时候

        “字节码执行引擎” 会开启一个线程进行Full gc(相比minor gc会慢很多)

        5.当“老年代”执行Full GC 都无法清空对象,并且已经放满的时候

        此时就会OOM了

  此文中材料均为学习视频中摘抄的资料,侵删。

 今天就先到这。下次看情况选择学习调优内容或者其他的知识点了

 

        

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值