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