স্ট্যাকওভারফ্লো এরিয়ার পাওয়ার আগে আমার কল স্ট্যাকের মধ্যে কত গভীর যেতে হবে? উত্তর প্ল্যাটফর্ম নির্ভর?
স্ট্যাকওভারফ্লো এরিয়ার পাওয়ার আগে আমার কল স্ট্যাকের মধ্যে কত গভীর যেতে হবে? উত্তর প্ল্যাটফর্ম নির্ভর?
উত্তর:
এটি স্ট্যাকের জন্য বরাদ্দ করা ভার্চুয়াল মেমরির পরিমাণের উপর নির্ভর করে।
http://www.odi.ch/weblog/posting.php?posting=411
আপনি এটি -Xssভিএম প্যারামিটার বা Thread(ThreadGroup, Runnable, String, long)কনস্ট্রাক্টরের সাথে টিউন করতে পারেন ।
আমি আমার সিস্টেমে পরীক্ষা করেছি এবং কোনও স্থির মান পাই না, কখনও কখনও 8900 কলের পরে স্ট্যাক ওভারফ্লো হয়, কখনও কখনও কেবল 7700 পরে, এলোমেলো সংখ্যার পরে।
public class MainClass {
private static long depth=0L;
public static void main(String[] args){
deep();
}
private static void deep(){
System.err.println(++depth);
deep();
}
}
public foo() { try { foo(); } finally { foo(); } }জাভাতে চিরকালের জন্য 'ভার্চুয়াল' চালাতে পারে তবেই ava
StackOverflowError8792 এর পরে ঘটে
স্ট্যাকের আকারটি -Xssকমান্ড লাইন সুইচের সাথে সেট করা যেতে পারে তবে থাম্বের নিয়ম হিসাবে এটি যথেষ্ট গভীর, কয়েক হাজার না হলেও কয়েক হাজার কল। (ডিফল্ট প্ল্যাটফর্ম নির্ভর, তবে বেশিরভাগ প্ল্যাটফর্মগুলিতে কমপক্ষে 256k)
যদি আপনি একটি স্ট্যাক ওভারফ্লো পান তবে কোডের একটি ত্রুটির কারণে 99% সময়।
এই দুটি কলের তুলনা করুন:
(1) স্থির পদ্ধতি:
public static void main(String[] args) {
int i = 14400;
while(true){
int myResult = testRecursion(i);
System.out.println(myResult);
i++;
}
}
public static int testRecursion(int number) {
if (number == 1) {
return 1;
} else {
int result = 1 + testRecursion(number - 1);
return result;
}
}
//Exception in thread "main" java.lang.StackOverflowError after 62844
(২) ভিন্ন শ্রেণি ব্যবহার করে অ স্থির পদ্ধতি:
public static void main(String[] args) {
int i = 14400;
while(true){
TestRecursion tr = new TestRecursion ();
int myResult = tr.testRecursion(i);
System.out.println(myResult);
i++;
}
}
//Exception in thread "main" java.lang.StackOverflowError after 14002
পরীক্ষা পুনরাবৃত্তি ক্লাস public int testRecursion(int number) {একমাত্র পদ্ধতি হিসাবে আছে ।