Rumah >Java >javaTutorial >Bagaimana untuk Meningkatkan Saiz Timbunan Java dan Mengelakkan StackOverflowError?

Bagaimana untuk Meningkatkan Saiz Timbunan Java dan Mengelakkan StackOverflowError?

DDD
DDDasal
2024-12-25 18:58:13142semak imbas

How to Increase Java Stack Size and Avoid StackOverflowError?

Cara Meningkatkan Saiz Tindanan Java (Parameter Xss)

Untuk menambah kapasiti tindanan masa jalan dalam JVM, gunakan '-Xss ' bendera baris arahan dengan nilai yang sesuai. Untuk program 'TT' (1<<15), '-Xss4m' memadai:

$ javac TT.java
$ java -Xss4m TT

Pergantungan Pelaksanaan Bendera '-X...'

Perhatikan bahawa bendera '-X...' adalah khusus pelaksanaan. Dalam versi Java yang disediakan, bendera '-Xss' mengawal saiz tindanan untuk semua urutan.

Peruntukan Tindanan Khusus Benang

Sebagai alternatif, anda boleh menetapkan yang murah hati saiz tindanan pada benang tertentu menggunakan kaedah java.lang.Thread.stackSize(). Pendekatan ini berfaedah kerana ia menghalang pembaziran memori untuk utas dengan keperluan tindanan sederhana.

Menentukan Keperluan Tindanan

Untuk mengukur saiz tindanan yang diperlukan untuk program, jalankannya secara berulang dengan meningkatkan saiz tindanan sehingga ia berjaya dilaksanakan tanpa 'StackOverflowError'. Untuk program 'TT', saiz tindanan ditentukan seperti berikut:

-Xss4m: suffices for (1 << 15)
-Xss5m: suffices for (1 << 17)
...
-Xss515m: suffices for (1 << 25)

Fenomena Keperluan Tindanan Tidak Tentu

Keperluan tindanan mungkin menunjukkan tingkah laku tidak tentu disebabkan faktor seperti kutipan sampah dan masa pelaksanaan JIT. Untuk mengira dengan tepat kedalaman tindanan yang dicapai, rujuk jawapan di bawah (menggunakan Javassist).

Pelaksanaan Alternatif

Pertimbangkan algoritma alternatif dengan penggunaan tindanan yang kurang. Untuk fungsi 'fakta', pelaksanaan berulang boleh digunakan untuk mengelakkan pengulangan dan mengurangkan penggunaan tindanan:

public class TTIterative {
    // ... implementation ...
}

BigInteger Considerations

Fungsi 'fakta' tidak boleh hitung pemfaktoran tepat untuk nombor yang lebih besar daripada 65 menggunakan jenis data 'panjang' akibat limpahan. Memfaktorkan semula fungsi untuk mengembalikan 'BigInteger' menangani isu ini dan memberikan hasil yang tepat untuk input yang lebih besar.

Atas ialah kandungan terperinci Bagaimana untuk Meningkatkan Saiz Timbunan Java dan Mengelakkan StackOverflowError?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn