Introdução ao cache de código da JVM
1. Introdução
Neste tutorial, daremos uma olhada rápida e aprenderemos sobre a memória cache de código da JVM.
2. O que é cache de código?
Simplificando,JVM Code Cache is an area where JVM stores its bytecode compiled into native code. Chamamos cada bloco do código nativo executável denmethod. Onmethod might ser um método Java completo ou embutido.
O compilador just-in-time (JIT) é o maior consumidor da área de cache de código. É por isso que alguns desenvolvedores chamam essa memória de cache de código JIT.
3. Ajuste de cache de código
The code cache has a fixed size. Quando estiver cheio, o JVM não compilará nenhum código adicional, pois o compilador JIT está desligado. Além disso, receberemos a mensagem de aviso“CodeCache is full… The compiler has been disabled ”. Como resultado, vamos acabar com o desempenho degradado em nosso aplicativo. Para evitar isso, podemos ajustar o cache de código com as seguintes opções de tamanho:
-
InitialCodeCacheSize - o tamanho inicial do cache de código, 160K padrão
-
ReservedCodeCacheSize - o tamanho máximo padrão é 48 MB
-
CodeCacheExpansionSize - o tamanho da expansão do cache de código, 32 KB ou 64 KB
AumentarReservedCodeCacheSize pode ser uma solução, mas normalmente é apenas uma solução temporária.
Felizmente, a JVM oferece umUseCodeCacheFlushing option to control the flushing of the code cache area. Seu valor padrão é falso. Quando o ativamos, elefrees the occupied area when the following conditions are met:
-
o cache do código está cheio; this area is flushed if its size exceeds a certain threshold
-
o intervalo certo é passado desde a última limpeza
-
o código pré-compilado não é quente o suficiente. Para cada método compilado, a JVM mantém o controle com um contador especial de calor. Se o valor desse contador for menor que um limite calculado, a JVM liberará essa parte do código pré-compilado
4. Uso do cache de código
Para monitorar o uso do cache de código, precisamos rastrear o tamanho da memória atualmente em uso.
To get information on code cache usage, we can specify the –XX:+PrintCodeCache JVM option. Depois de executar nosso aplicativo, veremos uma saída semelhante:
CodeCache: size=32768Kb used=542Kb max_used=542Kb free=32226Kb
Vamos ver o que cada um desses valores significa:
-
size en a saída mostra o tamanho máximo da memória, que é idêntico aReservedCodeCacheSize
-
used é o tamanho real da memória que está em uso
-
max_used é o tamanho máximo que está em uso
-
free é a memória restante que ainda não está ocupada
A opçãoPrintCodeCache é muito útil, pois podemos:
-
ver quando a descarga acontece
-
determinar se atingimos um ponto crítico de uso de memória
5. Conclusão
Este artigo rápido apresenta uma breve introdução ao cache de código da JVM.
Além disso, apresentamos algumas opções de uso e ajuste para monitorar e diagnosticar essa área de memória.