JVM 옵션 -Xss-정확히 무엇을합니까?


답변:


269

Java 응용 프로그램의 각 스레드에는 자체 스택이 있습니다. 스택은 리턴 주소, 함수 / 메소드 호출 인수 등을 보유하는 데 사용됩니다. 따라서 스레드가 재귀 알고리즘을 통해 큰 구조를 처리하는 경향이있는 경우 모든 리턴 주소 등을 위해 큰 스택이 필요할 수 있습니다. Sun JVM을 사용하면 해당 매개 변수를 통해 해당 크기를 설정할 수 있습니다.


11
따라서 -Xss 옵션은 스택이 소비하는 메모리의 양 (반환 주소, 변수 등을 저장하여)을 제한하고 스택이 얼마나 깊이 얻을 수 있는지 간접적으로 제한하는 데 사용됩니다. 나 맞아?
instantsetsuna

5
@instantsetsuna : 더 일반적인 용도는 아마도 기본 제한 을 늘리는 것이라고 생각합니다 . (한계가 항상 있습니다.) 그러나 예, 스택의 크기를 제어하여 스택의 깊이를 제어합니다.
TJ Crowder

Java 컴파일러 (일명 javac) 에서이 XSS 설정과 동등한 기능을 수행하는 방법은 무엇입니까? 스칼라 기반 라이브러리를 사용하는 사람들에게는 클래스 컴파일 과정에서 큰 꼬리 재귀가 발생하도록하는 문제 – Andrew Norman 9 초 전
Andrew Norman

@AndrewNorman : Java 런타임 옵션을 클래스 파일로 컴파일하지 않으므로 환경에 따라 다릅니다. 실제로 코드로 작성해야하는 경우 필요한 옵션을 사용하여 실제 응용 프로그램을 시작하는 것이 유일한 작은 주 클래스를 작성할 수 있습니다.
TJ Crowder

@AndrewNorman 컴파일러가 -Jflag구문 (예 :)을 사용하여 실행해야하는 JVM 구성 플래그를 제공 할 수 있습니다 -J-Xss.
francoisr

166

실제로 JVM에서 스택 크기를 설정합니다.

다음 두 상황 중 하나에서 터치해야합니다.

  • StackOverflowError (스택 크기가 한계보다 큼) 값을 늘리십시오.
  • OutOfMemoryError : 새 원시 스레드를 만들 수 없습니다 (너무 많은 스레드, 각 스레드에 큰 스택이 있음).

후자는 일반적으로 Xss가 너무 크게 설정되면 나타납니다. 그런 다음 균형을 잡아야합니다 (테스트 중!)


3
실제로 매번 반드시 그런 것은 아닙니다. SOE와 OOME 모두 다르게 수정해야하는 다른 이유로 인해 발생할 수 있습니다.
noego

4
사실, 나는 -Xss가 SOE와 OOME의 유일한 원인이라고 말하지 않았지만 다른 방법으로 잘못 설정하면 두 가지 중 하나가 발생할 수 있습니다.
Adam Adamaszek

5

각 스레드에는 로컬 변수 및 내부 값에 사용되는 스택이 있습니다. 스택 크기는 통화 깊이를 제한합니다. 일반적으로 이것은 변경할 필요가 없습니다.


4

내가 실수하지 않은 경우, 이것은 StackOverflowError를 발행하기 전에 JVM이 얼마나 많은 연속 호출을 수락하는지 알려줍니다. 일반적으로 바꾸고 싶은 것이 아닙니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.