前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM技术总结之二——GC机制

JVM技术总结之二——GC机制

作者头像
剑影啸清寒
修改2020-07-20 10:21:40
4070
修改2020-07-20 10:21:40
举报
文章被收录于专栏:琦小虾的Binary琦小虾的Binary

接上篇《JVM技术总结之一——JVM调优》

二. GC 机制

GC 的机制是什么?垃圾回收器的基本原理是什么?是否可以立即回收内存?怎么样主动的通知 JVM 进行垃圾回收?

2.1 GC 的目标与流程

GC 的目标,是在 GC Root 链之外的所有对象,GC Roots 是可达性分析算法的回收目标。GC Root 对象如下:

  • 被 JVM 栈引用的所有对象
  • 方法区中,类静态引用的对象;
  • 本地方法中静态引用的对象;
  • 方法区中常量引用的对象;

可达性分析时,需要找 GC Roots 的引用链。为了保证 GC Roots 状态的一致性,整个分析 GC Roots 引用链的过程就像是冻结了时间一样,即 Stop the world。 Stop the world 时,JVM 使用 OopMap 记录哪些地方存放着对象引用。由于为了权衡 OopMap 的大小与数量(如果 OopMap 数量过多,会比较频繁的出现 GC,如果 OopMap 大小过大,每次的 GC 时间会过长),所以 HotSpot JVM 在特定的位置记录 OopMap,这些特定的位置称为安全点 (SafePoint)。 GC 开始时需要中断线程,各个线程开始主动轮询一个中断标志,这个中断标志和一个安全点是重合的。各线程轮询时发现中断标志为真,就自己中断挂起。此外,对于处于 sleep, blocked 状态的线程,在进入 sleep, blocked 状态时,就会标注自己处于一个安全区域。对于处于安全区域的线程,不会参与前面所说的中断标志位的轮询过程。

2.2 引用的类型

引用的区分:

  • 强引用:类似于 new Object(),无论如何都不会被回收,即使 OOM 异常;
  • 软引用:JVM 内存不够的时候就会回收;
  • 弱引用:只要 GC 就会回收 (WeakHashMap 与其有关)
  • 虚引用:没什么卵用,摆设一个而已

对于方法区,类很少会被回收,或者说类被回收的条件很苛刻:

  1. 该类不存在任何实例对象;
  2. 该类的 ClassLoader 已经被回收;
  3. 没有任何地方调用该类的反射;

注:垃圾回收基本原理见前面《JVM技术总结之一——JVM调优》

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二. GC 机制
    • 2.1 GC 的目标与流程
      • 2.2 引用的类型
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档