Máquina Virtual Java - Níveis de Compilação
JVM suporta cinco níveis de compilação -
- Interpreter
- C1 com otimização total (sem criação de perfil)
- C1 com invocação e contadores de borda posterior (perfil de luz)
- C1 com perfil completo
- C2 (usa dados de criação de perfil das etapas anteriores)
Use -Xint se quiser desabilitar todos os compiladores JIT e usar apenas o interpretador.
Cliente vs. Servidor JIT
Use -client e -server para ativar os respectivos modos.
O compilador cliente (C1) começa a compilar o código antes do compilador servidor (C2). Portanto, no momento em que C2 começou a compilação, C1 já teria compilado seções de código.
Mas, enquanto espera, o C2 define o perfil do código para saber mais sobre ele do que o C1. Conseqüentemente, o tempo que ele espera se compensado pelas otimizações pode ser usado para gerar um binário muito mais rápido. Da perspectiva de um usuário, a compensação é entre o tempo de inicialização do programa e o tempo que leva para ser executado. Se o tempo de inicialização for premium, então C1 deve ser usado. Se o aplicativo deve ser executado por um longo tempo (típico de aplicativos implantados em servidores), é melhor usar C2, pois ele gera um código muito mais rápido que compensa muito qualquer tempo de inicialização extra.
Para programas como IDEs (NetBeans, Eclipse) e outros programas GUI, o tempo de inicialização é crítico. O NetBeans pode demorar um minuto ou mais para iniciar. Centenas de classes são compiladas quando programas como o NetBeans são iniciados. Nesses casos, o compilador C1 é a melhor escolha.
Observe que existem duas versões de C1 - 32b and 64b. C2 vem apenas em64b.
Compilação em camadas
Em versões anteriores do Java, o usuário poderia ter selecionado uma das seguintes opções -
- Intérprete (-Xint)
- C1 (-cliente)
- C2 (-server)
Ele veio em Java 7. Ele usa o compilador C1 para inicializar e, conforme o código fica mais quente, muda para o C2. Ele pode ser ativado com as seguintes opções de JVM: -XX: + TieredCompilation. o valor padrão éset to false in Java 7, and to true in Java 8.
Das cinco camadas de compilação, a compilação em camadas usa 1 -> 4 -> 5.