为了账号安全,请及时绑定邮箱和手机立即绑定

深入理解Java虚拟机-学习笔记-2垃圾回收机制

标签:
Java JVM

判定对象是否可以回收的算法:

    1.引用计数器 劣势 相互引用问题

    2.可达性分析 GC Roots作为起始点,形成引用链。GC Roots对象包含几钟类型(虚拟机栈中引用的对象、方法区静态属性应用的对象、方法区中常量引用的对象、native方法引用的对象) Java选用


引用分类:

    1.强引用 永远不会被回收

    2.软引用 SoftReference标识,内存溢出之前进行二次回收

    3.弱引用 WeakReference标识,下一次垃圾回收就回收。

    4.虚引用 PhantomReference标识,直接回收并收到一个系统通知


finalize()方法,假如实例的类实现了该方法且并没有执行过该方法,那么在被标记为不可达之后会将对象放置到一个F-Queue中,由一个低优先级的Finalizer线程去执行finalize()方法,并且不保证改方法执行完毕。不建议使用。


方法区(Hotspot中的永久代)回收问题:  方法区主要回收废弃常量和无用的类,暂不深入分析。


垃圾回收算法:

    1.标记清除 标记需要回收的对象,同一回收。劣势 效率和内存碎片化

    2.复制算法 基本思路是分成两块 使用一块 将存活的复制到另一块,清理掉其他的。Hotspot新生代的优化思路是一块Eden和两块Survivor,8:1,使用一块Eden合一块Survivor。Survivor不够用时分配对象到老年代。

    3.标记-整理 标记 回收时向一段移动,清理掉其他。老年代算法。

OopMap辅助寻找GC Roots,枚举根节点、安全点问题、安全区域问题待再次探讨。

新生代垃圾回收器:

    1.Serial    单线程,必须暂停其他线程

    2.ParNew  Serial的多线程版本

    3.Parallel Scavenge

老年代垃圾回收器:

    1.CMS

    2.Parallel Old

    3.Serial Old

全年代: G1


日志理解:


  • 内存分配与回收策略:待细致分析

    



  

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1
获赞与收藏
7

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消