Opsi JVM -Xss - Apa fungsinya sebenarnya?


Jawaban:


269

Setiap utas dalam aplikasi Java memiliki tumpukan sendiri . Tumpukan ini digunakan untuk menyimpan alamat pengirim, argumen panggilan fungsi / metode, dll. Jadi, jika utas cenderung memproses struktur besar melalui algoritma rekursif, mungkin diperlukan tumpukan besar untuk semua alamat pengirim dan semacamnya. Dengan Sun JVM, Anda dapat mengatur ukuran itu melalui parameter itu.


11
Jadi, opsi -Xss digunakan untuk membatasi berapa banyak memori yang dikonsumsi stack (dengan menyimpan alamat pengirim, variabel, dll) dan yang juga secara tidak langsung membatasi seberapa dalam stack bisa didapat? Apakah saya benar?
instantsetsuna

5
@instantsetsuna: Saya pikir penggunaan yang lebih umum mungkin untuk meningkatkan batas default. (Selalu ada batasnya.) Tapi ya, Anda mengendalikan ukuran tumpukan, yang mengontrol seberapa dalam tumpukan itu bisa.
TJ Crowder

bagaimana Anda melakukan yang setara dengan pengaturan XSS ini pada kompiler java (alias javac)? Ini masalah bagi mereka yang menggunakan perpustakaan berbasis scala yang menyebabkan rekursi ekor besar terjadi dalam kompilasi kelas - Andrew Norman 9 detik yang lalu
Andrew Norman

@AndrewNorman: Anda tidak mengkompilasi opsi runtime Java ke file kelas, itu lebih merupakan hal khusus lingkungan. Jika Anda benar-benar perlu melakukannya dalam kode, Anda dapat menulis kelas utama kecil yang tugas utamanya adalah meluncurkan aplikasi nyata Anda dengan opsi yang Anda butuhkan.
TJ Crowder

@AndrewNorman Anda dapat memberikan flag konfigurasi JVM yang harus dijalankan oleh kompiler dengan menggunakan -Jflagsintaks (mis. -J-Xss).
francoisr

166

Memang mengatur ukuran stack pada JVM.

Anda harus menyentuhnya di salah satu dari dua situasi berikut:

  • StackOverflowError (ukuran stack lebih besar dari batas), tambah nilainya
  • OutOfMemoryError: tidak dapat membuat utas asli baru (terlalu banyak utas, setiap utas memiliki tumpukan besar), kurangi.

Yang terakhir biasanya datang ketika Xss Anda diatur terlalu besar - maka Anda perlu menyeimbangkannya (pengujian!)


3
Tidak harus setiap waktu sebenarnya. Baik SOE dan OOME dapat terjadi karena alasan berbeda yang harus diperbaiki secara berbeda.
noego

4
Benar, tapi saya tidak mengatakan -Xss adalah satu-satunya penyebab SOE dan OOME, tetapi sebaliknya - jika diatur secara tidak benar, ini dapat menyebabkan salah satu dari keduanya.
Adam Adamaszek

5

Setiap utas memiliki tumpukan yang digunakan untuk variabel lokal dan nilai internal. Ukuran tumpukan membatasi seberapa dalam panggilan Anda. Umumnya ini bukan sesuatu yang perlu Anda ubah.


4

Jika saya tidak salah, inilah yang memberi tahu JVM berapa banyak panggilan berturut-turut yang akan diterimanya sebelum mengeluarkan StackOverflowError. Bukan sesuatu yang ingin Anda ubah secara umum.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.