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

Java JVM是否具有特定于机器的优化标志?,java,jvm,code-generation,Java,Jvm,Code Generation,我知道JVM解释/JIT字节码;JVM提供特定于平台的机器代码生成功能(和运行时),用于在当前上下文中运行程序 我想了解JVM中有哪些特定于平台的代码生成调优选项。我遇到了,这实际上是调整JVM运行时的唯一标志 我很想知道JVM是否允许为特定平台的代码生成提供调优选项,就像x86上的gcc一样。首先,JVM标志与gcc的优化标志有根本的不同。GCC标志影响编译时生成的代码。JVM选项(只要它们影响JIT编译)不会影响字节码 有各种各样的标志影响JIT编译器发出的本机代码;例如: -ea选项确定

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

我想了解JVM中有哪些特定于平台的代码生成调优选项。我遇到了,这实际上是调整JVM运行时的唯一标志


我很想知道JVM是否允许为特定平台的代码生成提供调优选项,就像x86上的gcc一样。

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

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

  • -ea
    选项确定是否检查断言
  • -server
    选项(部分)控制代码何时是JIT编译器,从而影响其优化。
    -Xcomp
    选项也执行相同的操作
  • -Xint
    -Xmixed
    影响代码是否进行JIT编译
然后有一些选项专门改变特定优化相关的事情。其中包括
-XX:ObjectAlignmentInBytes
-XX:CompressedOops
-XX:acgressiveopts
-XX:AllocatePrefetch
选项,
-XX:doescapesanalysis
-XX:Inline
选项,
-XX:OptimizeStringConcat
-XX:UseAES
选项和
-XX:UseSHA
选项

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

请注意:

  • 所有JIT代码优化都是特定于平台的,因为JIT编译器会针对实际运行的硬件进行优化
  • 相反,JIT编译器不需要被告知针对哪个平台进行优化
  • 上述一些选项是特定于平台的/具有特定于平台的效果(请参阅文档)
  • Java版本之间的
    -X
    -XX
    选项可能会更改
Java程序员通常让平台选择优化设置。java程序由于优化设置的选择而不比(例如)C++和C++程序1更容易被破坏。

1-对于单线程Java代码,优化设置不应改变程序的行为。对于多线程代码,由于同步不足,错误应用程序的行为可能会发生变化。虽然这可能对优化器设置很敏感,但也可能受到硬件特性、Java版本等的影响。

为什么会有反对票?我猜这是因为您请求引用非现场资源,这是离题的。