JVM是否具有特定于机器的优化标志?

时间:2018-01-13 00:56:20

标签: java jvm code-generation

我理解JVM解释/ JIT字节码;并且JVM在当前上下文中提供用于运行程序的平台特定的机器代码生成功能(和运行时)。

我想了解JVM中可用的特定于平台的代码生成调优选项。我遇到了https://docs.oracle.com/cd/E21764_01/web.1111/e13814/jvm_tuning.htm#PERFM167,这实际上只是调整JVM运行时的标志。

我很想知道JVM是否允许为特定平台生成代码的调优选项,就像x86 https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html#x86-Options上的gcc一样。

1 个答案:

答案 0 :(得分:1)

首先,JVM标志与GCC的优化标志根本不同。 GCC标志会影响编译时生成的代码。 JVM选项(在它们影响JIT编译的程度上)不会影响字节码。

有各种标志会影响JIT编译器发出的本机代码;例如:

  • -ea选项确定是否检查断言。
  • -server选项(部分)控制代码何时影响其优化的JIT编译器。 -Xcomp选项也是如此。
  • -Xint-Xmixed会影响代码是否完全由JIT编译。

然后有一些选项可以专门更改与特定优化相关的内容。其中包括-XX:ObjectAlignmentInBytes-XX:CompressedOops-XX:AggressiveOpts-XX:AllocatePrefetch选项,-XX:DoEscapeAnalysis-XX:Inline选项,-XX:OptimizeStringConcat,{ {1}}选项和-XX:UseAES选项。

有关更完整的列表,请参阅适用于您的平台的Oracle文档

请注意:

  • 所有JIT代码优化都是特定于平台的,因为JIT编译器会优化您实际运行的硬件。
  • 上述某些选项是特定于平台的(请参阅文档)
  • -XX:UseSHA-X选项可能会在Java版本之间发生变化。
  • Java程序员通常让平台选择优化设置。与(例如)C或C ++不同,Java程序通常对优化设置 1 不太敏感。

1 - 对于单线程Java代码,优化设置不应改变程序的行为。对于多线程代码,不正确的应用程序的行为可能会因不充分的同步而发生变化。