Java虚拟机-垃圾回收-思维导图

一、上面的关系图列出了JVM垃圾回收的几个重点,可以根据上图简单理清一条线。

二、HotSpot虚拟机的算法实现:

1.枚举根节点:使用一组OopMap的数据结构

        在类加载完成的时候,HotSpot就把对象内什么偏移量上市什么类型的数据计算出来,在JIT编译过程中,也会在特定的位置记录下栈和寄存器中哪些位置是引用。

2.安全点:程序执行时只有在到达安全点时才能发生停顿

          主动式中断,当GC需要中断线程的时候,不直接对线程操作,仅仅简单的设置一个标志,各个现场执行时主动去轮询这个标志,发现中断标志为真时就自己中断挂起。

        轮询标志的地方和安全点时重合的,另外再加上创建对象需要分配内存的地方。

3.安全区域:在一段代码片段之中,引用关系不会发生变化,在这个区域的任何地方开始GC都是安全的

          在线程执行到Safe Region中的代码时,首先标识自己已经进入了Safe Region;在线程要离开Safe Region时,它要检查系统是否已经完成了根节点枚举(或者是整个GC过程),如果完成,那线程继续执行,否则它就必须等到可以安全离开Safe Region的信号为止。

三、简单理解GC日志

举例

33.125 :【GC 【DefNew:3324k->152k(3712k),0.0025925 secs】  3324k->152k(11904k), 0.0031680 secs】

100.667:【Full GC 【Tenured:0k->210k(10240k),0.0149142 secs】 4603k->210k(19456k),【Perm:2999k->2999k(21248k)】,0.0150007 secs】【Times:user=0.01  sys=0.00,real=0.02secs】

1.最前面的数字33.125和100.667:GC发生的时间;

2.日志开头【GC】和【Full GC】:说明此次垃圾回收的停顿类型,如果有Full说明此次GC是发生了stop-the-world的,如果是调用System.gc()方法所触发的收集,那么在这里将显示【Full GC(System)】

3.【DefNew】、【Tenured】、【Perm】:表示GC发生的区域;DefNew=Default New Generation、ParNew=Parallel New Generation、PSYoungGen=Parallel Scavenge Young Generation、名称是由收集器决定的。

4.方括号内的3324k->152k(3712k):GC前该区域已使用容量->GC后该内存区域已使用容量(该内存区域总容量)。

5.方括号外的3324k->152k(11904k):GC前Java堆已使用容量->GC后Java堆已使用容量(Java堆总容量)。

6.0.0025925 secs:表示该内存区域GC所占用的时间,单位是秒。

   更具体的【Times:user=0.01  sys=0.00,real=0.02 secs】分别表示:用户态消耗的CPU时间、内核态消耗的CPU时间、操作从开始到结束所经过的墙钟时间。(墙钟时间包括:各种非运算的等待消耗(例如:等待磁盘I/O、等待线程阻塞))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值