Java垃圾回收

垃圾回收回收的触发条件--空间不够了。

垃圾回收的安全点:

        用户线程暂停,GC线程要开始工作,但是要确保用户线程暂停的这行字节码指令是不会导致引用关系的变化。所以JVM会在字节码指令中,选一引起指令,作为“安全点”,比如方法调用、循环跳转、异常跳转等,一般是这些指令才会产生安全点。为什么它叫安全点,是因为GC时要暂停业务线程,并不是抢占式中断(立马把业务线程中断),而是主动式中断。主动式中断是设置一个标志,这个标志是中断标志,各业务线程在运行过程中会不停地主动去轮询这个标志,一旦发现中断标志为True,就会在自己最近的安全点上主动中断挂起。

        安全区域,为什么需要安全区域?要是业务线程都不执行(业务 线程处于sleep或者是blocked状态)那么程序就没办法进入安全点,对于这种情况,就必须 引入安全区域。安全区域是指能够确保在某一段代码片段之中,引用关系不会发生变化。因此,在这个区域中任意地主开始都是安全的,我们也可以把安全区域看作被扩展拉伸了的安全点

CMS的线程数计算公式

区分young区的parnew gc线程数和old区的cms线程数,分别为以下两个参数 :

  • -XX:ParallelGCThreads=m   //STW暂停时使用的GC线程数,一般用满CPU
  • -XX:ConGCThreads=n         //GC线程和业务线程并发执行时使用的GC线程数,一般较小

ParallelGCThreads

其中ParallelGCThreads参数的默认值是:

  • CPU核心数<=8时,则为ParallelGCThreads=CPU核心数,比如4C8G取4,8C16G取8
  • CPU核心数>8,则ParallelGCThreads=CPU核心数*5/8+3向下取整
  • 16核的情况下ParallelGCThreads=13
  • 32核的情况下ParallelGCThreads=23
  • 64核的情况下ParallelGCThreads=43
  • 72核的情况下ParallelGCThreads=48

ConGCThreads

默认值计算公式:(ParallelGCThreads+3)/4向下取整

  • ParallelGCThread  = 1~4时,ConGCThreads =1;
  • ParallelGCThread = 5~8时, ConGCThreads=2;
  • ParallelGCThreads=13~16时,ConGCThread = 4;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值