Wat doet -XX:MaxPermSize?

Waarom zou het specifiek helpen om een ​​PermGen OutOfMemoryError-probleem op te lossen?

Ook bonuspunten voor een antwoord dat me verwijst naar de documentatie over JVM-argumenten…


Antwoord 1, autoriteit 100%

De permanente ruimte is waar de klassen, methoden, geïnternaliseerde tekenreeksen en soortgelijke objecten die door de VM worden gebruikt, worden opgeslagen en nooit worden verwijderd (vandaar de naam).

Dit Oracle-artikel geeft beknopt de werking en parametrisering van de HotSpot GC en raadt u aan deze ruimte te vergroten als u veel klassen laadt (dit is typisch het geval voor applicatieservers en sommige IDE zoals Eclipse):

De permanente generatie heeft geen merkbare impact op afval
collectorprestaties voor de meeste toepassingen. Echter, sommige
applicaties genereren en laden dynamisch vele klassen; bijvoorbeeld,
sommige implementaties van JavaServer Pages (JSP)-pagina’s. Deze
toepassingen hebben mogelijk een grotere permanente generatie nodig om de
extra lessen. Zo ja, dan kan de maximale permanente generatiegrootte:
worden verhoogd met de opdrachtregeloptie -XX:MaxPermSize=.

Merk op dat deze andere Oracle-documentatie somt de andere HotSpot-argumenten op.

Update : Vanaf Java 8 zijn zowel de permgen-ruimte als deze instelling verdwenen. Het geheugenmodel dat wordt gebruikt voor geladen klassen en methoden is anders en is niet beperkt (met standaardinstellingen). U zou deze fout niet meer moeten zien.


Antwoord 2, autoriteit 33%

-XX:PermSize -XX:MaxPermSize worden gebruikt om de grootte in te stellen voor permanente generatie.

Permanente generatie: de permanente generatie is waar klassebestanden worden bewaard. Deze zijn het resultaat van gecompileerde klassen en JSP-pagina’s. Als deze ruimte vol is, wordt een volledige vuilnisophaaldienst geactiveerd. Als de Full Garbage Collection geen oude klassen zonder referentie kan opschonen en er geen ruimte meer is om de permanente ruimte uit te breiden, wordt er een geheugenfout (OOME) gegenereerd en zal de JVM crashen.


Antwoord 3, autoriteit 18%

In Java 8 wordt die parameter vaak gebruikt om een ​​waarschuwingsbericht als dit af te drukken:

Java HotSpot(TM) 64-Bit Server VM-waarschuwing: optie negeren
MaxPermSize=512m; ondersteuning is verwijderd in 8.0

De reden waarom u dit bericht in Java 8 krijgt, is omdat Permgen is vervangen door Metaspace om enkele nadelen van PermGen aan te pakken (zoals u zelf heeft kunnen zien, is een van die nadelen dat het een vaste grootte had).

Ter info: een artikel over Metaspace: http://java-latte. blogspot.in/2014/03/metaspace-in-java-8.html

LEAVE A REPLY

Please enter your comment!
Please enter your name here

twenty + 16 =

Other episodes