Konfigurácia veľkostí zásobníka v JVM

1. Prehľad

V tomto rýchlom výučbe sa dozvieme, ako nakonfigurovať veľkosti zásobníka vlákien v HotSpot JVM.

2. Predvolená veľkosť stohu

Každé vlákno JVM má súkromný natívny zásobník na ukladanie informácií o zásobníku hovorov, miestnych premenných a čiastkových výsledkov. Zásobník preto hrá pri vyvolávaní metód rozhodujúcu úlohu. Toto je súčasť špecifikácie JVM a následne každá implementácia JVM tam používa zásobníky.

Ostatné podrobnosti implementácie, napríklad veľkosť zásobníka, sú však špecifické pre implementáciu. Odteraz sa zameriame na HotSpot JVM a pojmy JVM a HotSpot JVM budeme používať zameniteľne.

Každopádne JVM vytvorí komíny súčasne s vytvorením vlastníckeho vlákna.

Ak neurčíme veľkosť pre stohy, vytvorí JVM jednu s predvolenou veľkosťou. Táto predvolená veľkosť zvyčajne závisí od operačného systému a architektúry počítača. Napríklad ide o niektoré z predvolených veľkostí od Java 14:

  • Linux / x86 (64-bitový): 1 MB
  • macOS (64-bitový): 1 MB
  • Oracle Solaris (64-bit): 1 MB
  • Vo Windows používa JVM veľkosť zásobníka celého systému

V zásade môžeme vo väčšine moderných operačných systémov a architektúr očakávať okolo 1 MB pre každý zásobník.

3. Prispôsobenie veľkosti stohu

Na zmenu veľkosti stohu môžeme použiť -Xss ladenievlajka. Napríklad -Xss1048576 nastaví veľkosť stohu rovnú 1 MB:

java -Xss1048576 // vynechané

Ak nechceme vypočítať veľkosť v bajtoch, môžeme pomocou niektorých šikovných skratiek určiť rôzne jednotky - písmeno k alebo K označiť KB, m alebo M na označenie MB a g alebo G na označenie GB. Pozrime sa napríklad na niekoľko rôznych spôsobov, ako nastaviť veľkosť zásobníka na 1 MB:

-Xss1m -Xss1024k

Podobný -Xss, môžeme tiež použiť -XX: ThreadStackSize ladiaci príznak na konfiguráciu veľkosti zásobníka. Syntax pre -XX: ThreadStackSizeje však trochu iný. Mali by sme oddeliť veľkosť a názov vlajky rovnakým znamienkom:

java -XX: ThreadStackSize = 1024 // vynechané

HotSpot JVM nám nedovolí používať veľkosť menšiu ako minimálna hodnota:

$ java -Xss1K -version Zadaná veľkosť zásobníka vlákien Java je príliš malá. Zadajte minimálne 144 kB. Chyba: Nebolo možné vytvoriť virtuálny počítač Java. Chyba: Vyskytla sa závažná výnimka. Program sa ukončí.

Tiež nám to nedovolí použiť veľkosť väčšiu ako je maximálna hodnota (zvyčajne 1 GB):

$ java -Xss2g -version Neplatná veľkosť zásobníka vlákna: -Xss2g Zadaná veľkosť presahuje maximálnu reprezentovateľnú veľkosť. Chyba: Nepodarilo sa vytvoriť virtuálny počítač Java. Chyba: Vyskytla sa závažná výnimka. Program sa ukončí.

4. Záver

V tomto rýchlom výučbe sme videli, ako nakonfigurovať veľkosti zásobníka vlákien v HotSpot JVM.