7.1* Hoe kies je de juiste vuilnisman

Als uw toepassing geen strikte latentievereisten heeft, moet u de toepassing gewoon uitvoeren en de JVM zelf de juiste collector laten kiezen.

In de meeste gevallen werken de standaardinstellingen prima. Indien nodig kunt u de heapgrootte aanpassen om de prestaties te verbeteren. Als de prestaties nog steeds niet zijn zoals verwacht, kunt u proberen het verzamelprogramma aan te passen aan de eisen van uw toepassing.

  • Opeenvolgend . Als de applicatie een kleine dataset heeft (tot ongeveer 100 MB) en/of op een enkele processor draait zonder enige latentie-eisen.
  • parallel . Als de prioriteit applicatie-piekprestaties is en er geen latentievereisten zijn (of pauzes van een seconde of meer zijn acceptabel).
  • CMS/G1 . Als de responstijd belangrijker is dan de totale verwerkingscapaciteit en de pauzes voor het ophalen van afval korter moeten zijn dan een seconde.
  • ZGC . Als responstijd hoge prioriteit heeft en/of er een zeer grote hoop bij betrokken is.

7.2* Aanbevelingen voor afvalinzameling

Vermijd handmatige triggers

Naast de basismechanismen van afvalinzameling, is een van de belangrijkste punten van dit proces in Java dat het niet-deterministisch is. Dat wil zeggen, het is onmogelijk te voorspellen wanneer het precies tijdens runtime zal plaatsvinden.

Met behulp van de methode System.gc() of Runtime.gc() kunt u een hint in uw code opnemen om de Garbage Collector te starten, maar dit garandeert niet dat deze daadwerkelijk zal worden uitgevoerd.

Gebruik analysetools

Als u niet genoeg geheugen heeft om uw toepassing uit te voeren, zult u last hebben van vertragingen, lange ophaaltijden voor afval, 'wereldstop'-gebeurtenissen en uiteindelijk geheugenfouten. Dit kan erop wijzen dat de heap te klein is, maar het kan ook aangeven dat de applicatie een geheugenlek heeft.

U kunt een monitoringtool zoals jstat of Java Flight Recorder gebruiken om te zien of het heapgebruik voor onbepaalde tijd groeit, wat kan wijzen op een fout in de code.

Geef de voorkeur aan de standaardinstellingen

Als u een kleine, zelfstandige Java-toepassing hebt, hoeft u waarschijnlijk geen garbage collection in te stellen. De standaardinstellingen zullen u goed van dienst zijn.

Gebruik JVM-vlaggen om aan te passen

De beste benadering voor het opzetten van Garbage Collection in Java is het instellen van JVM-vlaggen. Vlaggen kunnen worden gebruikt om de afvalverzamelaar in te stellen (bijvoorbeeld Serieel, G1, enzovoort), de initiële en maximale grootte van de heap, de grootte van de heappartities (bijvoorbeeld Jonge generatie, Oude generatie) en nog veel meer. meer.

Kies de juiste kraan

Een goede leidraad voor de initiële instellingen is de aard van de maatwerktoepassing. De gelijktijdige vuilnisophaler is bijvoorbeeld efficiënt, maar roept vaak 'wereldstop'-gebeurtenissen op, waardoor het meer geschikt is voor interne verwerking waarbij lange pauzes acceptabel zijn.

Tegelijkertijd is de CMS-garbagecollector ontworpen om latentie te minimaliseren, wat hem ideaal maakt voor webapplicaties waarbij responsiviteit belangrijk is.