JVM学习笔记(三)之内存管理

  •  安全点

GC运行时,必须停顿所有Java执行线程。所谓的安全点,就是程序只有在安全点才会进行GC。那么GC发生时,如何让所有线程都“跑到”安全点有两种方案:1)抢占式中断;2)主动式中断。

抢占式中断:首先所有线程全部中断,如果有线程不在安全点上,恢复线程,让其“跑到”安全点上。这种方案现在几乎不用。

主动式中断:设置一个中断标志位,让每个线程轮询这个标记位,发现中断标记位为真时,主动中断挂起。

  • 安全区域

安全区域指的是在一段代码片段中,引用关系不会发生变化。在线程执行到安全区时,首先标记自己已经进入了安全区,那样当这段时间里JVM要发起GC时,就不用管标记自己为安全区的线程了(因为这些线程此时不会发生引用变化)。在线程要远离安全区时,它要建成系统是否已经完成了GC整个过程,如果完成了,那线程继续执行,否则必须等到收到可以安全离开安全区域的信号为止。

  • 垃圾收集器

作用于新生代:Serial、ParNew、Parallel Scavenge

作用于老年代:CMS、Serial Old、Parall Old

G1收集器:并行与并发;分代收集(不需要与其他收集器配合);空间整合(整体是标记-整理,局部是复制);可预测的停顿

Serial、ParNew、CMS、Serial Old关注点是尽可能地缩短垃圾收集时线程的停顿时间;

Parallel Scavenge、Parall Old关注的是可控制的吞吐量(cpu用于运行用户代码时间与cpu消耗总时间的比值)-XX:MaxGCPauseMillis(控制最大垃圾收集停顿时间);-XX:GCTimeRatio(直接设置吞吐量大小)

可以相互配合使用的:Serial和CMS;Serial和Serial Old;ParNew和CMS;ParNew和Serial Old;Parallel Scavenge和Serial Old;Parallel Scavenge和Parall Old

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值