반응형
Java 콜 스택의 최대 깊이는 얼마입니까?
Stack Overflow Error가 발생하기 전에 콜스택에 얼마나 깊이 들어가야 합니까?응답 플랫폼은 의존합니까?
스택에 할당된 가상 메모리의 양에 따라 달라집니다.
http://www.odi.ch/weblog/posting.php?posting=411
이 튜닝은,-Xss
VM 파라미터 또는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();
}
}
스택 사이즈는 다음과 같이 설정할 수 있습니다.-Xss
커맨드 라인 스위치이지만, 경험상으로는 충분히 깊고, 콜의 깊이가 수백은 되지 않습니다.(기본값은 플랫폼에 의존하지만, 대부분의 플랫폼에서는 256k 이상입니다.)
스택 오버플로가 발생하면 99%가 코드의 오류로 인해 발생합니다.
다음의 2개의 콜을 비교합니다.
(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
(2) 다른 클래스를 사용하는 비정적 방법:
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) {
유일한 방법으로서
언급URL : https://stackoverflow.com/questions/4734108/what-is-the-maximum-depth-of-the-java-call-stack
반응형
'IT' 카테고리의 다른 글
Axios에서 헤더와 옵션을 설정하려면 어떻게 해야 합니다. (0) | 2022.11.07 |
---|---|
어떤 클래스가 다른 클래스의 서브 클래스인지(런타임 시) 확인하려면 어떻게 해야 합니까? (0) | 2022.10.30 |
PHP cURL HTTP PUT (0) | 2022.10.30 |
다른 테이블에 존재하지 않음으로써 SQL의 특정 행 표시 (0) | 2022.10.30 |
람다 함수 폐쇄는 무엇을 캡처합니까? (0) | 2022.10.30 |