单线程消除了多线程应用程序中涉及的许多复杂性。
我想知道是否有可以利用单线程应用程序的垃圾收集器配置?
现在我在 Java 运行时环境构建中使用UseConcMarkSweepGC、incrementalMode GC设置:Java 1.6.0_22-b04
单线程消除了多线程应用程序中涉及的许多复杂性。
我想知道是否有可以利用单线程应用程序的垃圾收集器配置?
现在我在 Java 运行时环境构建中使用UseConcMarkSweepGC、incrementalMode GC设置:Java 1.6.0_22-b04
如果 JVM 在单线程机器上启动,它不会使用多核所需的复杂内存屏障,从而节省了一些 CPU 周期。
但是 JVM 本质上是多线程的,即使你只有一个线程,仍然有其他线程支持 JVM。
所以答案是否定的,没有针对单线程应用程序优化的 GC 算法。
GC 策略不取决于您如何编写应用程序,而是取决于您拥有的硬件。
例如,如果您只有一个 CPU 可用,那么您不应该启用 CMS,原因有两个:
在这种情况下,您应该启用 SerialGC(或 ParallelGC,在单 CPU 机器上无关紧要)。
现在,如果您有N
可用的内核但您的应用程序只使用一个,您可以设置-XX:ConcGCThreads=N-1
和-XX:ParallelGCThreads=N-1
(取决于您使用的 GC),以便 JVM 充分利用您的硬件。
请注意,在设置任何标志之前,您应该启用 GC 日志,-Xloggc:gc.log -XX:+PrintGCDetails
并在每次新配置后检查它是否提高了您的应用程序响应时间/吞吐量。
来源:http: //jvm-options.tech.xebia.fr/