Mengkonfigurasi Ukuran Tumpukan di JVM

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan melihat bagaimana mengkonfigurasi ukuran timbunan utas di HotSpot JVM.

2. Saiz Stack Lalai

Setiap utas JVM mempunyai timbunan asli peribadi untuk menyimpan maklumat timbunan panggilan, pemboleh ubah tempatan, dan hasil separa. Oleh itu, timbunan memainkan peranan penting dalam pemanggilan kaedah. Ini adalah sebahagian dari spesifikasi JVM, dan akibatnya, setiap implementasi JVM di luar sana menggunakan tumpukan.

Namun, perincian pelaksanaan lain, seperti ukuran tumpukan, adalah khusus pelaksanaan. Mulai sekarang, kami akan memberi tumpuan kepada HotSpot JVM dan akan menggunakan istilah JVM dan HotSpot JVM secara bergantian.

Bagaimanapun, JVM akan membuat timbunan pada masa yang sama ia menghasilkan benang yang dimiliki.

Sekiranya kita tidak menentukan ukuran untuk timbunan, JVM akan membuatnya dengan ukuran lalai. Biasanya, ukuran lalai ini bergantung pada sistem operasi dan seni bina komputer. Sebagai contoh, ini adalah beberapa ukuran lalai seperti Java 14:

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

Pada dasarnya, kita boleh menjangkakan sekitar 1 MB untuk setiap timbunan di kebanyakan sistem operasi dan seni bina moden.

3. Menyesuaikan Ukuran Tumpukan

Untuk menukar ukuran timbunan, kita dapat menggunakan bendera penalaan -Xss . Contohnya, -Xss1048576 menetapkan ukuran timbunan sama dengan 1 MB:

java -Xss1048576 // omitted

Sekiranya kita tidak mahu mengira ukuran dalam bait, kita dapat menggunakan beberapa jalan pintas yang berguna untuk menentukan unit yang berlainan - 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 berbeza untuk menetapkan saiz timbunan menjadi 1 MB:

-Xss1m -Xss1024k

Sama dengan -Xss , kita juga dapat menggunakan bendera penalaan -XX: ThreadStackSize untuk mengkonfigurasi ukuran timbunan. Sintaks untuk -XX: ThreadStackSize , bagaimanapun, sedikit berbeza. Kita harus memisahkan ukuran dan nama bendera dengan tanda yang sama:

java -XX:ThreadStackSize=1024 // omitted

HotSpot JVM tidak akan membenarkan 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.

Juga, ini tidak akan membolehkan kita menggunakan ukuran lebih dari nilai maksimum (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 ringkas ini, kami melihat cara mengkonfigurasi ukuran timbunan utas di HotSpot JVM.