我理解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一样。
答案 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文档 。
请注意:
-XX:UseSHA
和-X
选项可能会在Java版本之间发生变化。1 - 对于单线程Java代码,优化设置不应改变程序的行为。对于多线程代码,不正确的应用程序的行为可能会因不充分的同步而发生变化。