Java Virtual Machine schakelopties

 
20 oktober 2008

De Sun JVM (Java Virtual Machine) kent een enorme lijst van schakel opties. Deze opties beïnvloedden het gedrag en performance van de JVM. Een paar interessante opties som ik hier op.

HotSpot Virtual Machines
De JRE (Java Runtime Environment) komt met de Client HotSpot VM, de JDK (Java Developers Kit) komt met de Client HotSpot VM en de Server HotSpot VM. Standaard wordt er gebruik gemaakt van de Client HotSpot VM. Om gebruik te maken van de Server VM gebruikt men: -server. Dit moet de eerste optie zijn in de lijst met argumenten voor de JVM.
De Client HotSpot VM is geoptimaliseerd om Java zo snel mogelijk op te starten en zo min mogelijk geheugen te gebruiken. De Server HotSpot VM is puur geoptimaliseerd op snelheid, opstart tijd en geheugen gebruik hebben hierbij een ondergeschikte rol.

Geheugen opties
Iedereen die in Java programmeert zal wel bekend zijn met de belangrijkste schakel opties om het geheugen gebruik in te stellen. Toch zal ik ze voor de duidelijkheid even vermelden.

  • -Xmx, Definieert het maximale dat de JVM mag alloceren. Voorbeeld: -Xmx1024m. De m staat voor megabyte.
  • -Xms, Definieert het minimale dat de JVM mag alloceren (standaard is dat 64Mb). Voorbeeld: -Xms512m. Ook hier geld: de m staat voor megabyte.
  • -XX:MaxPermSize, geeft de maximale grootte aan voor de permanent generation. Voorbeeld: -XX:MaxPermSize=256m.
  • -XX:ThreadStackSize, Deze optie maakt het mogelijk om de stack size in te stellen per thread. Het kan soms zijn dat een applicatie zo veel threads gebruikt dat het crashed. Dit kan dan komen vanwege het feit dat elke thread 1 megabyte pakt terwijl het niet gebruikt wordt. De standaard stack size is sterk afhankelijk van het gebruikte OS (Operating system) en architectuur. Voorbeeld: -XX:ThreadStackSize=512.

Gedrag opties
Dit zijn de handige opties. Deze kom je niet vaak tegen in opstart scripts die eigenlijk wel gebruikt zouden moeten worden. Bij performance problemen is het handig eens te experimenteren met deze opties. Deze opties hebben allemaal geen waarde, je geeft ze mee als argument van de JVM of niet.

  • -XX:-UseParallelGC, Deze optie zorgt ervoor dat de garbage collector meerdere threads gaat gebruiken voor het collecteren.
  • -XX:-UseParallelOldGC, Deze optie activeert de hierboven genoemde optie en zorgt er tevens voor dat de garbage collector ook in de permanent generation parallel gaat collecteren.
  • -XX:-DisableExplicitGC, Handige optie voor applicatie servers dat ervoor zorgt dat een explicite aanroep tot garbage collecten (System.gc()) genegeerd wordt. Uiteraard kan men dit ook doen door middel van beveiliging. Het gebruik van beveiliging geeft echter een exceptie en stopt de applicatie (Niet de applicatie server!).
  • -Xrs, Heel handige schakel optie. Deze optie staat voor reduce signals. Er zijn meerdere niveaus van stop signalen die het OS kan sturen naar de JVM. Bij een grote groep van deze signalen zal de JVM stoppen. Bij het gebruik van deze schakel optie zal de JVM alleen reageren bij de zeer belangrijke stop signalen. Oftewel: als je een JVM opstart met deze schakel optie zal de JVM niet stoppen als je als gebruiker afmeld bij het OS. Handig als je een deamon process wil draaien.
  • -d64, laat de VM gebruik maken van 64bit data model als dit mogelijk is.

Werken met ?
Kijk dan bij onze mogelijkheden voor starters en/of ervaren IT'ers.


Categorieën: Development, Deployment, Java (EE)

Tags: , , ,