use*_*127 14 java garbage-collection jvm concurrent-mark-sweep
我看到许多类的卸载,我的整个系统将在这段时间内挂起..
[Unloading class sun.reflect.GeneratedMethodAccessor117]
[Unloading class sun.reflect.GeneratedConstructorAccessor1896]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor485]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor579]
.... // about 1700 of them
Run Code Online (Sandbox Code Playgroud)
与此同时,我没有看到烫发空间出现峰值,所以它似乎不是GC事件.
我想知道以下内容
IS Concurrent Mark Sweep收集了一个停止世界事件?
即使烫发空间不满也会发生吗?
Ani*_*kur 19
CMS是一种GC,分为几个阶段

正如您可以看到两个阶段 - 初始标记和备注是停止世界事件.
资料来源:根据Reviewing Generational GC and CMS部分.
Does it happen even when the perm space is not full?
Run Code Online (Sandbox Code Playgroud)
AFAIK这个你应该有CMSClassUnloadingEnabled带UseConcMarkSweepGC.当permgen面积达到阈值时,将触发FGC.
此外,虽然并发扫描(短语(4))不是STW事件,如果permgen区域被填满(并且GC仍在处理permgen区域),它可能导致停止所有进程线程并且只有GC线程运行直到回收所有所需的内存.
CMS不是“事件”。这是一个垃圾收集器。CMS确实有几个阶段,所有阶段都停止了,但是在正常情况下,这些阶段非常短(几毫秒)。通常,如果您停顿了很长时间,则意味着CMS无法跟上垃圾产生的速度(在已设置的约束范围内),并且JVM必须使用“打扫”收藏家...这是停止世界。
根据您的JVM,可能只有在发生完全GC时才收集permgen,并且仅在对permgen进行GC处理时才收集/卸载类。
但是您不能推断出类的卸载会导致长时间的停顿。实际上,如果您的GC统计数据表明未充满permgen,则很有可能反过来。
您的类卸载日志也可能导致 “停止世界”问题:请参阅http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6637203
观察结果:
如果您有成千上万的关于卸载动态创建的类的消息,那么我来看看您系统的体系结构。您是否过度使用代理类?
在Java 8中,permgen消失了,并由元空间代替。升级可以缓解您的问题。
| 归档时间: |
|
| 查看次数: |
13935 次 |
| 最近记录: |