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.