JVM-垃圾收集器与内存分配策略

如何判断对象死亡

一、引用计数法:设置一个程序计数器,如果被引用则加一,如果没被引用就是没用的对象
二、可达性分析:从GC Roots出发,如果某个对象没有任何到GC Roots的引用链则会被判断为被回收对象。
GC Roots:
1.虚拟机栈中的引用对象
2.方法区中的静态属性引用的对象或者常量引用对象
3.java虚拟机内部的引用对象,比如基本类型的对应的class
4.被同步锁持有的对象

三、引用
1.强引用:obj o=new obj()类型
2.软引用:还有用但是非必须的对象,在发生内存溢出之前会把这些引用回收掉
3.弱引用:软引用破产版,不管内存够不够,下次回收时候都会被回收
4.虚引用:一个对象的虚引用不会对对象本身有影响,为了能在这个对象被回收的时候收到一个系统的通知。

四、死亡或者生存?
一个对象即使被判定为不可达对象也不是会非被回收不可,要真正被宣布死亡会经过两次标记:1.gc roots可达性分析没有发现引用链被标为回收对象,随后进行一次筛选,条件是看此对象有没有必要执行finalize()方法,再次此间如果重新建立连接,则逃出生天。如果对象没有覆盖此方法,或者此方法被调用过了,则被视为不用执行finalize()方法。

五、方法区的回收
1.常量的回收
2.不再使用的类型

六、垃圾收集算法
1.标记-清除算法
问题:如果要清除很多大内存的对象,效率会很低,会产生很多内存碎片
2.标记-复制算法
问题:如果内存中存活很多大内存对象,复制对象花销大
3.标记-整理算法

七、经典垃圾收集器
1.serial收集器:单线程处理,进行垃圾收集的时候必须暂停
2.CMS收集器:初始标记,并发标记,重新标记,并发清除
3.G1收集器:初始标记,并发标记,最终标记,筛选分析

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值