Einführung in den JVM-Code-Cache

Einführung in den JVM-Code-Cache

1. Einführung

In diesem Tutorial werden wir uns kurz mit dem Code-Cache-Speicher der JVM befassen.

2. Was ist der Code-Cache?

Einfach ausgedrückt,JVM Code Cache is an area where JVM stores its bytecode compiled into native code. Wir nennen jeden Block des ausführbaren nativen Codesnmethod. Dasnmethod might ist eine vollständige oder inline Java-Methode.

Der Just-in-Time-Compiler (JIT) ist der größte Konsument des Code-Cache-Bereichs. Aus diesem Grund nennen einige Entwickler diesen Speicher einen JIT-Code-Cache.

3. Code-Cache-Optimierung

The code cache has a fixed size. Sobald es voll ist, kompiliert die JVM keinen zusätzlichen Code, da der JIT-Compiler jetzt deaktiviert ist. Außerdem erhalten wir die Warnmeldung“CodeCache is full… The compiler has been disabled. Infolgedessen wird die Leistung unserer Anwendung beeinträchtigt. Um dies zu vermeiden, können wir den Code-Cache mit den folgenden Größenoptionen optimieren:

  • InitialCodeCacheSize - Die anfängliche Code-Cache-Größe beträgt standardmäßig 160 KB

  • ReservedCodeCacheSize - Die maximale Standardgröße beträgt 48 MB

  • CodeCacheExpansionSize - Die Erweiterungsgröße des Code-Cache, 32 KB oder 64 KB

Das Erhöhen vonReservedCodeCacheSize kann eine Lösung sein, dies ist jedoch normalerweise nur eine vorübergehende Problemumgehung.

Glücklicherweise bietet die JVM einUseCodeCacheFlushing option to control the flushing of the code cache area. Der Standardwert ist false. Wenn wir es aktivieren, ist esfrees the occupied area when the following conditions are met:

  • Der Code-Cache ist voll. this area is flushed if its size exceeds a certain threshold

  • Das bestimmte Intervall ist seit der letzten Bereinigung vergangen

  • Der vorkompilierte Code ist nicht heiß genug. Für jede kompilierte Methode verfolgt die JVM einen speziellen Hotness Counter. Wenn der Wert dieses Zählers unter einem berechneten Schwellenwert liegt, gibt die JVM diesen Teil des vorkompilierten Codes frei

4. Verwendung des Code-Cache

Um die Verwendung des Code-Cache zu überwachen, müssen wir die Größe des aktuell verwendeten Speichers verfolgen.

To get information on code cache usage, we can specify the –XX:+PrintCodeCache JVM option. Nach dem Ausführen unserer Anwendung wird eine ähnliche Ausgabe angezeigt:

CodeCache: size=32768Kb used=542Kb max_used=542Kb free=32226Kb

Mal sehen, was jeder dieser Werte bedeutet:

  • size in zeigt der Ausgang die maximale Größe des Speichers an, die mitReservedCodeCacheSize identisch ist

  • used ist die tatsächliche Größe des aktuell verwendeten Speichers

  • max_used ist die maximale Größe, die verwendet wurde

  • free ist der verbleibende Speicher, der noch nicht belegt ist

Die OptionPrintCodeCache ist sehr nützlich, da wir:

  • Sehen Sie, wann die Spülung stattfindet

  • Ermitteln Sie, ob ein kritischer Speicherauslastungspunkt erreicht wurde

5. Fazit

Dieser kurze Artikel enthält eine kurze Einführung in den JVM-Code-Cache.

Zusätzlich haben wir einige Verwendungs- und Optimierungsoptionen vorgestellt, um diesen Speicherbereich zu überwachen und zu diagnostizieren.