JVM 설정에 액세스하지 않고 스택 크기를 확장하는 방법은 무엇입니까?
Nov 14 2020
다른 곳에서 실행할 코드를 제출하고 있으므로 JVM 설정에 액세스 할 수 없으므로 스택 크기 확장에 대한 다른 스택 오버플로 답변을 따를 수 없습니다. 내 Java 파일 내에서 수행 할 수있는 방법이 있습니까?
내가 이것을하고 싶은 이유 (정말 중요하지 않음) :
10 ^ 5 노드가있는 트리에서 재귀를 사용하고 있습니다. 평균적인 경우는 괜찮지 만 나무의 모양에 대한 보장은 없습니다. 나는 나무가 단지 하나의 긴 선인 가장자리 케이스를 다루고 있습니다. StackOverflowError가 발생하지만 스택 크기를 확장 할 수만 있으면 알고리즘이 제대로 실행됩니다. 트리의 중심을 찾거나 희소 행렬을 사용하여이 경우를 처리했지만 스택 크기를 두 배로 늘리고 기존 코드를 사용합니다.
답변
i'magirl Nov 30 2020 at 01:18
주석을 요약하기 위해 새 스레드를 만들고 스택 크기를 지정할 수 있지만 문서에서는 그 효과가 플랫폼에 따라 크게 달라진다고 말합니다 (적어도 내 컴퓨터에서 작동 함). 여기에서 더보기 :https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Thread.html#%3Cinit%3E(java.lang.ThreadGroup,java.lang.Runnable,java.lang.String,long)
예:
public static void main(String[] args)
{
Thread thread1 = new Thread(null, null, "qwer", 1000000) {
public void run() {
System.out.println(countDepth());
}
};
thread1.start();
}
public static int countDepth() {
try {return 1+countDepth();}
catch(StackOverflowError err) { return 0; }
}
(스택 크기를 변경하면 훨씬 더 높은 재귀 깊이를 볼 수 있습니다)