Java虚拟机调优 -Xbatch和-Xcomp

36
我正在查看关于运行Alfresco的JVM配置选项,主要参考文档,位于Alfresco Wiki上。建议之一是使用JVM标志-Xcomp-Xbatch。其理由是:

如果您希望Hotspot预编译类,可以添加[-Xcomp和-Xbatch]。这将显着增加服务器启动时间,但会突出显示稍后可能会遇到的缺失依赖项。

从我在其他地方阅读到的有关-Xcomp-Xbatch标志的信息,我想知道它们是否真的提供任何好处。
  • -Xcomp 使HotSpot编译所有代码,以最大优化方式预先进行编译,因此放弃了VM通过系统的标准运行获得的任何分析。
  • -Xbatch 停止后台编译,这意味着导致代码被编译的线程将被阻塞,直到编译完成。然而,在编译完成后,之前被阻塞的线程不会运行已编译的代码,它仍将运行解释代码。这是Java 6(Mustang)中的变化 - 在Mustang之前,通过-Xbatch标志阻塞编译的线程保证在编译完成后立即在编译代码中运行。因此,我猜想-Xbatch标志的建议是在旧VM上运行Alfresco的遗物。

有什么想法吗?我的倾向是摆脱这两个标志,依靠VM来正确处理事情。

首先,我想补充两件事,我还没有访问Alfresco实例进行测试,其次,我不知道托管Alfresco的机器规格是什么,除了通过查看其他配置选项,它必须是64位VM。尽管如此,我希望社区将从一般HotSpot调优的角度提供一些有用的输入。


阿尔弗雷斯科页面上的真实世界示例部分是2009年8月,看起来是JDK 1.6? - shinynewbike
@ktaylorjohn 是的,没错,但我只是想知道 -Xbatch 和 -Xcomp 标志是否有任何区别。除了 JVM 测试和类似领域之外,Alfresco 似乎是唯一提到这些标志的项目。 - Rich
2个回答

30

一般来说,最好让HotSpot编译器自行调整。甚至64位和某些“服务器级”机器都默认使用Server VM(-server)。

-Xbatch主要用于调试,如您指出的Steve Goldman的博客所述:

因此,即使在mustang之前的日子里,-Xbatch开关也不是特别有用的开关。 它对于jvm开发人员来说具有一定的用处,因为它往往使运行更加可预测和可重现。

-Xcomp会删除收集信息以进行高效编译的能力。根据Alex Turner的帖子

有人认为从性能角度考虑-Xcomp是个好主意。 然而,实际上并非如此!JIT编译器在编译之前使用那1000次迭代来收集有关应该如何编译方法以实现最佳效率的信息。 -Xcomp删除了它这样做的能力,因此我们实际上可以看到性能下降。

在没有性能考虑的情况下,我从未看到过使用这些标志来检测缺少的依赖项(如果某些代码仍然被解释,则可能无法正常工作),因此,在我看来应该摆脱两者。


链接已失效。 - Eugene

0

Alfresco是一种企业内容管理系统。我不确定标志如何影响其性能。然后同一页上的一个注释说...

-- 然而,这将显著增加服务器启动时间,但会突出显示可以在以后遇到的缺失依赖项。 ...

在我看来,作者并不是真正意味着性能提升。他/她写这篇文章是为了检查所有依赖项是否就位。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接