Konfiguration af stakstørrelser i JVM

1. Oversigt

I denne hurtige vejledning skal vi se, hvordan du konfigurerer trådstakstørrelserne i HotSpot JVM.

2. Standardstørrelse på stakken

Hver JVM-tråd har en privat indbygget stak til at gemme oplysninger om opkaldsstak, lokale variabler og delvise resultater. Derfor spiller stakken en afgørende rolle i metodeopkald. Dette er en del af JVM-specifikationen, og derfor bruger hver JVM-implementering derude stakke.

Imidlertid er andre implementeringsoplysninger, såsom stakstørrelse, implementeringsspecifikke. Fra nu af fokuserer vi på HotSpot JVM og bruger udtrykkene JVM og HotSpot JVM om hverandre.

Alligevel, JVM opretter stakke på samme tid, som den opretter den ejer tråd.

Hvis vi ikke angiver en størrelse for stakkene, opretter JVM en med en standardstørrelse. Normalt afhænger denne standardstørrelse af operativsystemet og computerarkitekturen. For eksempel er disse nogle af standardstørrelserne fra Java 14:

  • Linux / x86 (64-bit): 1 MB
  • macOS (64-bit): 1 MB
  • Oracle Solaris (64-bit): 1 MB
  • På Windows bruger JVM den samlede stabelstørrelse

Dybest set kan vi forvente omkring 1 MB for hver stak i de fleste moderne operativsystemer og arkitekturer.

3. Tilpasning af stakstørrelsen

For at ændre stakstørrelsen kan vi bruge -Xss indstillingflag. F.eks -Xss1048576 indstiller stakstørrelsen lig med 1 MB:

java -Xss1048576 // udeladt

Hvis vi ikke ønsker at beregne størrelsen i byte, kan vi bruge nogle praktiske genveje til at angive forskellige enheder - brevet k eller K at angive KB, m eller M for at angive MB, og g eller G for at angive GB. Lad os f.eks. Se et par forskellige måder at indstille stakstørrelsen på 1 MB:

-Xss1m -Xss1024k

Svarende til -Xss, vi kan også bruge -XX: ThreadStackSize tuning flag for at konfigurere stakkens størrelse. Syntaksen for -XX: ThreadStackSizeer dog lidt anderledes. Vi skal adskille størrelsen og flagnavnet med et lighedstegn:

java -XX: ThreadStackSize = 1024 // udeladt

HotSpot JVM tillader os ikke at bruge en størrelse, der er mindre end en minimumsværdi:

$ java -Xss1K -version Den angivne størrelse på Java-trådstakken er for lille. Angiv mindst 144k fejl: Kunne ikke oprette Java Virtual Machine. Fejl: Der er sket en dødelig undtagelse. Programmet afslutter.

Det tillader os heller ikke at bruge en størrelse mere end den maksimale værdi (normalt 1 GB):

$ java -Xss2g -version Ugyldig trådstakstørrelse: -Xss2g Den angivne størrelse overstiger den maksimale repræsentative størrelse. Fejl: Kunne ikke oprette Java Virtual Machine. Fejl: Der er sket en dødelig undtagelse. Programmet afslutter.

4. Konklusion

I denne hurtige vejledning så vi, hvordan du konfigurerer trådstakstørrelserne i HotSpot JVM.