Mengonfigurasi Ukuran Tumpukan di JVM

1. Ikhtisar

Dalam tutorial singkat ini, kita akan melihat cara mengonfigurasi ukuran tumpukan benang di HotSpot JVM.

2. Ukuran Tumpukan Default

Setiap utas JVM memiliki tumpukan bawaan pribadi untuk menyimpan informasi tumpukan panggilan, variabel lokal, dan hasil parsial. Oleh karena itu, tumpukan memainkan peran penting dalam pemanggilan metode. Ini adalah bagian dari spesifikasi JVM, dan akibatnya, setiap implementasi JVM di luar sana menggunakan tumpukan.

Namun, detail implementasi lainnya, seperti ukuran tumpukan, bersifat khusus untuk implementasi. Mulai sekarang, kami akan fokus pada HotSpot JVM dan akan menggunakan istilah JVM dan HotSpot JVM secara bergantian.

Bagaimanapun, JVM akan membuat tumpukan pada saat yang sama membuat utas pemilik.

Jika kami tidak menentukan ukuran untuk tumpukan, JVM akan membuatnya dengan ukuran default. Biasanya, ukuran default ini bergantung pada sistem operasi dan arsitektur komputer. Misalnya, ini adalah beberapa ukuran default pada Java 14:

  • Linux / x86 (64-bit): 1 MB
  • macOS (64-bit): 1 MB
  • Oracle Solaris (64-bit): 1 MB
  • Di Windows, JVM menggunakan ukuran tumpukan seluruh sistem

Pada dasarnya, kami dapat mengharapkan sekitar 1 MB untuk setiap tumpukan di sebagian besar sistem operasi dan arsitektur modern.

3. Menyesuaikan Ukuran Stack

Untuk mengubah ukuran stack, kita dapat menggunakan flag tuning -Xss . Misalnya, -Xss1048576 menyetel ukuran tumpukan sama dengan 1 MB:

java -Xss1048576 // omitted

Jika kami tidak ingin menghitung ukuran dalam byte, kami dapat menggunakan beberapa pintasan praktis untuk menentukan unit yang berbeda - huruf k atau K untuk menunjukkan KB, m atau M untuk menunjukkan MB, dan g atau G untuk menunjukkan GB. Sebagai contoh, mari kita lihat beberapa cara berbeda untuk mengatur ukuran tumpukan ke 1 MB:

-Xss1m -Xss1024k

Mirip dengan -Xss , kita juga dapat menggunakan flag tuning -XX: ThreadStackSize untuk mengkonfigurasi ukuran stack. Sintaks untuk -XX: ThreadStackSize , bagaimanapun, sedikit berbeda. Kita harus memisahkan ukuran dan nama bendera dengan tanda yang sama:

java -XX:ThreadStackSize=1024 // omitted

HotSpot JVM tidak mengizinkan kami menggunakan ukuran kurang dari nilai minimum:

$ java -Xss1K -version The Java thread stack size specified is too small. Specify at least 144k Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.

Selain itu, ini tidak mengizinkan kami untuk menggunakan ukuran lebih dari nilai maksimal (biasanya 1 GB):

$ java -Xss2g -version Invalid thread stack size: -Xss2g The specified size exceeds the maximum representable size. Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.

4. Kesimpulan

Dalam tutorial singkat ini, kami melihat cara mengonfigurasi ukuran tumpukan benang di HotSpot JVM.