Java 是什么导致幸存者在伊甸园GC后不能从1切换到0

Java 是什么导致幸存者在伊甸园GC后不能从1切换到0,java,garbage-collection,jvm,Java,Garbage Collection,Jvm,是什么导致幸存者在伊甸园GC后使用相同的空间而不从1切换到0 Java: Java HotSpot(TM) 64-Bit, 1.7.0_80 OS: Windows10. 下面给出了Jboss4.0.4中测试环境的设置 JAVA_OPTS=-server -Xmx12288m -Xms6144m -Xmn4096m -Xss512k -XX:PermSize=1024m -XX:MaxPermSize=2048m -XX:SurvivorRatio=10 -XX:+UseConcMarkS

是什么导致幸存者在伊甸园GC后使用相同的空间而不从1切换到0

Java:  Java HotSpot(TM) 64-Bit, 1.7.0_80
OS: Windows10.
下面给出了Jboss4.0.4中测试环境的设置

 JAVA_OPTS=-server -Xmx12288m -Xms6144m -Xmn4096m -Xss512k -XX:PermSize=1024m -XX:MaxPermSize=2048m -XX:SurvivorRatio=10 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ParallelGCThreads=8 -XX:+UseCompressedOops -Dsun.rmi.dgc.client.gcInterval=1800000 -Dsun.rmi.dgc.server.gcInterval=1800000 -Dprogram.name=%PROGNAME% -Dfile.encoding=utf-8 -Djboss.platform.mbeanserver=true

也许,当所有剩余的幸存者恰好连续出现在幸存者空间的开头时,复制操作将被省略,而空间不会被切换。反对这种优化的原因是,在我看来,这是一种罕见的情况,我甚至不会花费精力来测试这种情况。但是只有知道实现/源代码的人才能提供明确的答案。谢谢Holger,在我的环境中,这似乎并不罕见,因为它时不时地发生。这可能与visualVM有关。不管怎样,就像你说的,可能不值得深入挖掘。原则上,可能某个特定的gc循环没有幸存者。请注意,在这一点上,旧的gen也减少了,所以可能一些更大的东西没有使用。这是有道理的。另外,在下一个循环中不切换幸存者空间也符合我对优化的猜测。毕竟,如果这些假设成立,那么它将为您的应用程序提供一个近乎完美的配置环境,因为大多数对象在Eden阶段都无法生存。也许,把伊甸园扩大一点会让它变得更好。