Unter der Annahme einer 64-Bit-JVM gibt es einen signifikanten Vorteil, wenn Sie MaxPermSize klein halten?
Dies ist im Kontext einer Java EE-Anwendung, die häufig neu implementiert wird und ein Classloader-Leck aufweist. Als mittelfristige Problemumgehung erscheint es sehr sinnvoll, MaxPermSize auf einen absurden Wert zu erhöhen - solange es den Festplatten-Swap-Speicherplatz nicht ausbläst.
Da der Code der nicht-deployten App fast nicht verwendet wird (abgesehen von dem, der in das Leck involviert ist), wird er vom Betriebssystem ausgelagert. Die Belastung des physischen Gedächtnisses durch nicht deponierten Detritus scheint daher vernachlässigbar; Dies wurde durch Beobachtung von RSS (die Größe des Arbeitssatzes unter Unix) verifiziert.
Gibt es andere Auswirkungen, über die ich besorgt sein sollte?
Von JVM HotSpot-FAQ
Soll ich die permanente Generierung im Client vm erhöhen?
Dies wird immer ein Urteilsspruch sein. Im Allgemeinen kann die Erhöhung der Größe einer Generation (und dies gilt nicht nur für die permanente Erzeugung) das Auftreten einer Vielzahl von Problemen verringern. Dies kann jedoch dazu führen, dass andere Prozesse übermäßig blättern und / oder Müll sammeln oder wegwerfen. Speicherausnahmen.
Es gibt zwei Fehlerarten, die zu berücksichtigen sind.
Wenn Sie MaxPermSize anheben, ist es möglich, dass Programme, die sich früher gut benommen haben, um den permanenten Generierungsraum wiederherzustellen, durch endloses Paging verloren gehen. Bei der permanenten Generierung geschieht dies meist nur durch das starke Einpegeln temporärer Strings.
Der andere Fehlermodus besteht darin, dass der Adressraum für die permanente Generierung reserviert werden muss und dadurch die für den Rest des Heapspeichers verfügbare Adresse reduziert wird (das Maximum -Xmx kann dann zu groß sein). Dies führt dazu, dass Programme, die für die Verwendung des gesamten verfügbaren Speicherplatzes konfiguriert sind, bei der Initialisierung fehlschlagen.
Auch dieser Artikel lautet:
Wir nutzen also die Tatsache aus, dass Klassen in der permanenten Generation gehalten werden, indem wir die permanente Generation sammeln, bevor wir die Dauergeneration sammeln. Und die permanente Generation wird derzeit seriell gesammelt.
Eine große permanente Generation kann eine längere GC-Zeit nach sich ziehen.