Kann jemand bitte erklären, was die JVM-Option ist ReservedCodeCacheSize
und was InitialCodeCacheSize
sind? Speziell wann / warum sollte ich es ändern wollen? Wie entscheide ich mich für die richtige Größe?
Dies ist, was die Dokumente sagen:
-XX: ReservedCodeCacheSize = 32m Reservierte Code-Cache-Größe (in Bytes) - maximale Code-Cache-Größe. [Solaris 64-Bit, amd64 und -Server x86: 2048 m; in 1.5.0_06 und früher Solaris 64-Bit und and64: 1024m.]
java
jvm
jvm-hotspot
Raghu
quelle
quelle
Antworten:
ReservedCodeCacheSize
(undInitialCodeCacheSize
) ist eine Option für den (Just-in-Time-) Compiler der Java Hotspot-VM. Grundsätzlich wird die maximale Größe für den Code-Cache des Compilers festgelegt.Der Cache kann voll werden, was zu Warnungen wie den folgenden führt:
Es ist viel schlimmer, wenn gefolgt von
Java HotSpot(TM) Client VM warning: Exception java.lang.OutOfMemoryError occurred dispatching signal SIGINT to handler- the VM may need to be forcibly terminated
.Wann muss diese Option eingestellt werden?
Normalerweise würden Sie diesen Wert nicht ändern. Ich denke, die Standardwerte sind ziemlich ausgewogen, da diese Probleme nur sehr selten auftreten (nach meiner Erfahrung).
quelle
Reserved code cache size (in bytes) - maximum code cache size. [Solaris 64-bit, amd64, and -server x86: 48m; in 1.5.0_06 and earlier, Solaris 64-bit and amd64: 1024m.]
OpenJDK-Werte sind nicht bekannt. Ein moderater Anstieg sollte ausreichen (eine frühere Einstellung von 1024 m war jenseits von Gut und Böse).@jeha beantwortet alles, was ich aus dieser Frage wissen wollte, abgesehen davon, auf welchen Wert die Parameter eingestellt werden sollen. Da ich den Code, den ich bereitstellte, nicht geschrieben habe, hatte ich nicht viel Einblick in den Speicherbedarf.
Sie können jedoch jconsole verwenden, um eine Verbindung zu Ihrem laufenden Java-Prozess herzustellen, und dann auf der Registerkarte "Speicher" die Größe des Code-Cache ermitteln. Der Vollständigkeit halber sind die Schritte (Linux-VM-Umgebung, obwohl ich sicher bin, dass andere Umgebungen ähnlich sind):
Auch hier kann es einige Momente dauern, bis der Bildschirm aktualisiert wird, und dann sollten Sie Folgendes sehen:
Wie Sie sehen können, verwendet mein Code-Cache ca. 49 MB. Zu diesem Zeitpunkt hatte ich noch die Standardeinstellung, die laut Dokumentation (und @jeha) 48 MB beträgt. Mit Sicherheit eine große Motivation für mich, die Einstellung zu verbessern!
Ben.
1024 MB standardmäßig haben es wahrscheinlich übertrieben, aber 48 MB standardmäßig scheinen es zu übertreiben ...
quelle
Eine gute Lernerfahrung des Ingenieurteams von Indeed und Herausforderungen bei der Migration auf jdk 8.
http://engineering.indeedblog.com/blog/2016/09/job-search-web-app-java-8-migration/
Fazit: Jdk 8 benötigt mehr Code-Cache als JDK 7
Die Standard-Codecache-Größe für JRE 8 beträgt ca. 250 MB und ist damit etwa fünfmal so groß wie die Standardgröße von 48 MB für JRE 7. Nach unserer Erfahrung benötigt JRE 8 diesen zusätzlichen Codecache. Wir haben bisher ungefähr zehn Dienste auf JRE 8 umgestellt, und alle verwenden ungefähr viermal mehr Codecache als zuvor.
quelle
von https://blogs.oracle.com/poonam/entry/why_do_i_get_message :
Diese Informationen sind möglicherweise für Systeme erwähnenswert, die unter JDK 6 (Code-Flushing deaktiviert) und 7 ausgeführt werden.
quelle