Veremméretek konfigurálása a JVM-ben
1. Áttekintés
Ebben a gyors bemutatóban megnézzük, hogyan konfigurálhatja a szálak veremét a HotSpot JVM-ben.
2. Alapértelmezett vereméret
Minden JVM-szálnak van egy saját natív vereme a hívásverem-információk, a helyi változók és a részeredmények tárolására. Ezért a verem döntő szerepet játszik a metódusok meghívásában. Ez a JVM specifikáció része, következésképpen minden ottani JVM implementáció halmokat használ.
A megvalósítás egyéb részletei, például a verem mérete azonban megvalósítás-specifikusak. Mostantól a HotSpot JVM-re fogunk összpontosítani, és a JVM és a HotSpot JVM kifejezéseket felváltva fogjuk használni.
Egyébként is, a JVM egyidejűleg halmokat hoz létre a tulajdonosi szál létrehozásával.
Ha nem adunk meg a halom méretét, a JVM létrehoz egy alapértelmezett méretet. Ez az alapértelmezett méret általában az operációs rendszertől és a számítógép architektúrájától függ. Például ezek a Java 14-hez képest az alapértelmezett méretek:
- Linux / x86 (64 bites): 1 MB
- macOS (64 bites): 1 MB
- Oracle Solaris (64 bites): 1 MB
- Windows rendszeren a JVM az egész rendszerre kiterjedő veremméretet használja
Alapvetően a legtöbb modern operációs rendszerben és architektúrában 1 MB-ra számíthatunk minden egyes veremért.
3. A verem méretének testreszabása
A verem méretének megváltoztatásához használhatjuk a -Xss hangolászászló. Például a -Xss1048576 1 MB méretre állítja a verem méretét:
java -Xss1048576 // kihagyva
Ha nem akarjuk a méretet bájtban számolni, használhatunk néhány praktikus parancsikont a különböző egységek megadására - a betű k vagy K a KB megjelölésére, m vagy M az MB megjelölésére, és g vagy G GB megjelölésére. Nézzünk meg például néhány különböző módszert a verem méretének 1 MB-ra történő beállításához:
-Xss1m -Xss1024k
Hasonló -Xss, használhatjuk a -XX: ThreadStackSize tuning flag a verem méretének konfigurálásához. A szintaxisa a -XX: ThreadStackSizeazonban egy kicsit más. A méretet és a zászló nevét egyenlőségjelekkel kell elválasztanunk:
java -XX: ThreadStackSize = 1024 // kihagyva
A HotSpot JVM nem engedi meg, hogy a minimálisnál kisebb méretet használjunk:
$ java -Xss1K -version A megadott Java szál verem mérete túl kicsi. Legalább 144 k hiba megadása: Nem sikerült létrehozni a Java virtuális gépet. Hiba: Végzetes kivétel történt. A program kilép.
Ezenkívül nem teszi lehetővé, hogy a maximális értéknél (általában 1 GB) nagyobb méretet használjunk:
$ java -Xss2g -version Érvénytelen szálköteg-méret: -Xss2g A megadott méret meghaladja a maximálisan reprezentálható méretet. Hiba: Nem sikerült létrehozni a Java virtuális gépet. Hiba: Végzetes kivétel történt. A program kilép.
4. Következtetés
Ebben a gyors oktatóanyagban láthattuk, hogyan konfigurálhatjuk a szálak veremét a HotSpot JVM-ben.