메서드 호출로 인해 스택 오버플로가 발생하는지 확인하는 간단한 방법은 없습니다.
슬롯의 수를 결정할 수 있지만 메서드는 스택에 필요합니다. 실제로 필요한 바이트 수는 알려주지 않습니다.
Java 바이트 코드는 스택이 추상 "슬롯"으로 구성된 것처럼 처리되는 실제 스택의 추상화와 함께 작동합니다. 이 참조, 메소드 매개 변수 및 지역 변수는 모두 스택에서 하나 또는 두 개의 슬롯을 차지합니다 (길고 두 배는 두 개의 슬롯이 필요하고 나머지는 한 개의 슬롯으로 계산됩니다). 클래스 파일에서 얻을 수있는 정보입니다.
슬롯이 실제로 스택 메모리로 변환되는 방식과 실제로 JIT가 바이트 코드에서 실제로 생성하는 방식이 아직 없습니다. JIT는 (코드 불변 이동과 같은) 최적화를 수행 할 때 임시 변수를 추가 할 수도 있습니다.
또한 네이티브 메서드를 호출 할 때 호출에 걸리는 스택 메모리의 양을 알 수있는 방법이 없습니다.
현재 JRE, VM 및 플랫폼에 따라 크게 달라집니다. 실제 스택의 크기를 실제로 확인하기위한 간단한 빌드 인 메서드가 없기 때문에 스택을 얼마나 필요로하고 얼마나 사용할 수 있는지 결정하는 것은 비실용적입니다.
'.class' 파일은 사람이 읽을 수있는 것이 아닙니다. 그것은 기계 코드입니다. 거기를 들여다 보지 마라. 또한 다음과 같은 정보가 도움이 될 것입니다. http://stackoverflow.com/a/20030999/2398375 –
.class 파일을 실제로보고 싶다면 [javap] (http://docs.oracle.com/ javass/7/docs/technotes/tools/windows/javap.html) 해체를 제공합니다. – vandale
문제점을 지원하는 다른 리소스 (이전 주석을 편집 할 수 없음) : http://www.oracle.com/technetwork/java/hotspotfaq -138619.html # threads_oom –