Java VM tuning - Xbatch 和 -Xcomp

2022-09-01 07:50:10

我正在研究运行Alfresco的JVM配置选项,主要是Alfresco Wiki上的这个文档。其中一个建议是使用 JVM 标志和 。理由是:-Xcomp-Xbatch

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

从我在其他地方读到的关于和标志的内容来看,我想知道它们是否真的提供了任何好处。-Xcomp-Xbatch

  • -Xcomp让 HotSpot 事先编译所有代码并进行最大优化,从而放弃 VM 通过系统标准运行获得的任何分析。
  • -Xbatch停止后台编译,这意味着导致代码被编译的线程块,直到编译完成。但是,编译完成后,先前阻塞的线程将不会运行已编译的代码它仍将运行解释的代码。这是Java 6(Mustang)中的一个变化 - 在Mustang之前,由于标志的存在而被阻止编译的线程保证在编译完成后立即在编译的代码中运行。因此,我猜想该标志的建议是在较旧的VM上运行Alfresco的遗物。-Xbatch-Xbatch

有人有什么想法吗?我的倾向是摆脱这两个标志,依靠VM来把事情做好。

我想添加两件事,首先,我还无法访问Alfresco实例来测试它,其次,我真的不知道除了其他配置选项之外,什么规格的机器正在托管Alfresco,它必须是一个64位VM。尽管如此,我希望社区能有一些有用的意见,也许从一般的HotSpot调整的角度来看。


答案 1

一般来说,最好让 HotSpot 编译器自行调整。即使使用服务器VM(-server)也是64位和一些“服务器级”计算机的默认功能。

-Xbatch主要用于调试,如史蒂夫·戈德曼(Steve Goldman)的博客中所述:

因此,即使在野马时代,-Xbatch开关也不是特别有用的开关。它对jvm开发人员来说有些用处,因为它倾向于使运行更加可预测和可重现。

-Xcomp删除了收集信息以进行有效编译的能力。来自Alex Turner的帖子

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

如果没有性能,我从未见过使用这些标志来检测缺少的依赖项(如果仍然解释某些代码,它可能不起作用),所以恕我直言,我会摆脱这两者。


答案 2

Alfresco是一家企业内容管理公司。我不确定这些标志如何影响其性能。然后同一页的一张纸条说..

-- 但是,这将大大增加服务器启动时间,但会突出显示以后可以命中的缺失依赖项。...

恕我直言,作者并不是真正的性能提升。他/她写它是为了检查所有依赖关系是否到位。


推荐