재귀 깊이 결정
최대 재귀 깊이를 측정하려면 현재 스택 깊이와 재귀 수준을 계산하는 것이 바람직한 경우가 많습니다. StackOverflowError가 발생하기 전에 실행될 수 있습니다.
스택 깊이 계산
levelDeep() 메소드는 예외를 생성 및 포착하고 검사하여 현재 스택 깊이를 결정하는 것을 목표로 합니다. 결과 스택 추적. 그러나 최대 깊이가 1024라는 제한은 장애물이 됩니다.
재귀 수준 계산
stackLeft() 메서드는 재귀적으로 남은 스택 깊이를 계산하려고 시도합니다. StackOverflowError가 발생할 때까지 자신을 호출합니다. 이는 신뢰할 수 있는 접근 방식인 것 같습니다.
Java 8의 비결정적 스택 깊이
예기치 않게 특정 Java 버전(예: Oracle Java)에서 stackLeft()를 사용하는 경우 8) 비결정적 결과를 산출합니다. 최대 재귀 깊이는 대략 18,500에서 20,700 사이입니다. 이 동작은 깊이가 일관되게 유지되는 OpenJDK 7에서는 관찰되지 않습니다.
비결정성의 원인
이 비결정적 동작은 Java 핫스팟 간의 상호 작용에서 비롯됩니다. 최적화 프로그램 및 다음과 같은 다양한 요소:
따라서 Java 8의 최대 재귀 깊이는 이러한 요소의 조합에 따라 달라질 수 있습니다. 비결정적입니다.
위 내용은 Java 8의 JIT 최적화는 최대 재귀 깊이에 어떤 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!