标签:收集 table fnr color eth log 自己的 自定义 eve
-Xnoclassgc
关闭对类的回收(拓展阅读:JVM参数详解)-XX:+CMSScavengeBeforeRemark
参数,CMS就会在重新标记之前执行一次minor GC-XX:PretenureSizeThreshold=xxx
可以设置大对象的标准,超过这个值,会被直接放入到老年代,注意这个时候是不会触发minor GC的-XX:MetaspaceSize=xxM
来设置元空间大小java -XX:+PrintFlagsInitial
我对于安全点的理解,把GC的过程看成街道消毒的过程,用户线程就是在街上跑步前进的人,安全点就是街道上每隔一段距离设置的一个防空洞,街上的人会有三种状态:跑步(running),在防空洞等待消毒完成(block),在街外面等人(in native),每个人状态修改时,必须将自己的状态写在一个本子上(serialization page内存).消毒的时候,必须确保所有人都已经躲进地下的防空洞中了或者在街外等人.这要怎么做呢,首先我准备消毒的时候,会设置一个信号灯(sync_state),在街上跑步的人每路过一个防空洞,都要看一下这个预备消毒的信号灯有没有亮,如果亮了,就躲进防空洞里面,停止跑步,并修改自己的状态为阻塞(block),等消毒完成后在出来继续跑.在消毒的过程中,街道办事处就不允许人修改自己的状态了(设置serialization page只读).
安全区域就是一开始我在防空洞里面睡觉(线程调用sleep),或者我到街外面等人去了(等待IO),在睡觉或者等待的时候,我会把我的状态修改好(block或者in native),而且在我睡醒或者等到人了之后,在回到街道之前,我要去修改我的状态,如果当前街道还在消毒,办事处不会让我改状态的(serialization page只读),只有等到消毒完成,我才可以重新回到街道.
安全点的位置
为啥要在这四个地方设置安全点
JVM要等所有应用线程进入到安全点后才会分派GC任务,如果有线程一直没有进入到安全点,就会导致GC的停顿时间延长.
安全点应用实战
-XX:+PrintGCApplicationStoppedTime
打印JVM停顿时间,如果GC日志前面有较大的停顿,要就要考虑是不是代码里有较大的循环操作.-XX:+UnlockDiagnosticVMOptions
-XX:+LogVMOutput
-XX:LogFile=/dev/shm/vm.log
-XX:+PrintSafepointStatistics
-XX:PrintSafepointStatisticsCount=1
看看大神是怎么解决问题的 无法进入安全点导致GC停顿时间过长问题
推荐 JVM安全点介绍及实战
推荐 安全点图解
推荐 CMS垃圾收集器详细介绍
ID[1]
12466925 ?
标签:收集 table fnr color eth log 自己的 自定义 eve
原文地址:https://www.cnblogs.com/Serenity1994/p/12466925.html