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!