对于我们的应用程序,我们使用 Java HotSpot(TM)64位服务器VM(25.66-b17)用于linux-amd64 JRE(1.8.0_66-b17)以及以下JVM设置:
-XX:+ AlwaysPreTouch -XX:CMSInitiatingOccupancyFraction = 75 -XX:+ ExplicitGCInvokesConcurrent -XX:InitialHeapSize = 32212254720 -XX:+ ManagementServer -XX:MaxHeapSize = 32212254720 -XX:MaxNewSize = 4294967296 -XX:MaxTenuringThreshold = 6 -XX :NewSize = 4294967296 -XX:OldPLABSize = 16 -XX:+ PrintGCApplicationConcurrentTime -XX:+ PrintGCApplicationStoppedTime -XX:+ PrintGCDateStamps -XX:+ PrintGCDetails -XX:+ PrintGCTimeStamps -XX:+ PrintHeapAtGC -XX:+ PrintTenuringDistribution -XX:+ UseCMSInitiatingOccupancyOnly -XX:+ UseCompressedClassPointers -XX:+ UseCompressedOops -XX:+ UseConcMarkSweepGC -XX:+ UseParNewGC
我注意到通过GCViewer,使用终身代,达到75%,"并发收集"执行几乎不断地(每分钟)调用,没有任何真正的清洁。
我希望如果CMS无法清理内存,那么将执行完整的gc。很遗憾,我无法在公共资源中找到有关此类行为的信息。 能否帮助我更好地理解这个过程。
答案 0 :(得分:0)
使用CMS收集器,Full GC通常会被"并发模式失败"触发,这意味着只要收集器能够赶上它的垃圾,就不需要调用& #34;大家伙#34;。