/ / A JVM possui sinalizadores de otimização específicos da máquina? - java, jvm, geração de código

A JVM possui sinalizadores de otimização específicos da máquina? - java, jvm, geração de código

Entendo que uma JVM interpreta / JITs obytecodes; e que a JVM fornece a funcionalidade de geração de código de máquina específica da plataforma (e tempo de execução) para executar o programa, no contexto atual.

Gostaria de entender quais opções de ajuste de geração de código específicas da plataforma estão disponíveis na JVM. Eu encontrei https://docs.oracle.com/cd/E21764_01/web.1111/e13814/jvm_tuning.htm#PERFM167, que na verdade são apenas sinalizadores para ajustar o tempo de execução da JVM.

Estou interessado em saber se a JVM permite opções de ajuste para geração de código para uma plataforma específica, assim como o gcc no x86 https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html#x86-Options.

Respostas:

1 para resposta № 1

Primeiro de tudo, os sinalizadores da JVM são fundamentalmentediferente dos sinalizadores de otimização do GCC. Os sinalizadores do GCC afetam o código gerado no momento da compilação. As opções da JVM (na medida em que afetam a compilação do JIT) NÃO afetam o bytecode.

Existem vários sinalizadores que afetam o código nativo emitido pelo compilador JIT; por exemplo:

  • o -ea As opções determinam se as asserções são verificadas.
  • o -server A opção (em parte) controla quando o código é o compilador JIT que afeta sua otimização. o -Xcomp opção faz o mesmo.
  • o -Xint e -Xmixed afetar se o código é JIT compilado.

Depois, existem opções que alteram especificamente coisas específicas relacionadas à otimização. Esses incluem -XX:ObjectAlignmentInBytes, -XX:CompressedOops, -XX:AggressiveOpts, a -XX:AllocatePrefetch opções, -XX:DoEscapeAnalysis, a -XX:Inline opções, -XX:OptimizeStringConcat, a -XX:UseAES opções e as -XX:UseSHA opções.

Para uma lista mais completa, consulte a documentação do Oracle para sua plataforma.

Observe que:

  • Toda a otimização de código JIT é específica da plataforma, no sentido em que o compilador JIT otimiza para o hardware em que você está realmente executando.
  • Algumas das opções acima são específicas da plataforma (consulte a documentação)
  • o -X e -XX As opções podem mudar entre as versões Java.
  • Programadores Java normalmente permitem que a plataforma selecione as configurações de otimização. Ao contrário de (digamos) C ou C ++, os programas Java normalmente são menos sensíveis às configurações de otimização1.

1 - Para um código Java de thread único, as configurações de otimização não devem alterar o comportamento de um programa. Para um código multiencadeado, o comportamento de um incorreta aplicação pode mudar devido a inadequado sincronização.