2016-09-29 2 views
0

Java 개발자는 가끔 java -Xss 1M을 사용하여 스레드와 관련된 각 스택에 1MB 공간을 제공합니다. 이제는 JVM이 힙 또는 시스템 메모리에서 1MB를 빌려 쓰거나 Java가 스레드에 할당하는 특정 메모리가있는 곳에서 종종 혼란스러워합니다. 이걸 이해하게 도와 주실 수 있습니까?JVM 스택 메모리

또한 힙과 스택의 내용을 이해하기 쉬운 방법으로 보여주는 시각적 (플러그인) 런타임 도구가 있습니까?

미리 감사드립니다.

+0

스레드 당 정확히 1MB 스택 크기가 필요하다고 어떻게 판단합니까? – Holger

답변

1

여기서 JVM은 힙 또는 시스템 메모리에서 1MB를 빌려 왔습니까?

JVM은 스택 메모리를 운영 체제에서 "빌려"하므로 "시스템 메모리"라고 부를 수도 있습니다. JVM은 실제로 운영 체제의 가상 메모리 시스템에서 스레드 스택 공간으로 사용하는 메모리 블록을 요청합니다. JVM에서 사용하는 모든 메모리 (코드, 스택, 힙 등)는 동일한 방식으로 OS에서 요청됩니다. 스택 메모리는 JVM 자체가 관리하는 힙 메모리와 별개입니다. JVM을의 메모리를 분할하는 방법을, 나는이 대답 확인해 줄에 대한 자세한 내용은

: 또한 How is the java memory pool divided?

, 우리는 내용을 표시하는 시각 (플러그인) 런타임 도구가 할 힙과 스택을 이해할 수있는 방법으로?

힙 메모리의 내용에 대해 이야기하는 경우 메모리 프로파일 러에 대한 정보를 찾아야합니다. 여기에 좋은 question about that topic입니다. good tutorial on the subject도 있습니다. 그러나, 나는이 도구들이 당신에게 기억을 "이해할 수있는 방법"으로 보여 줄지 확신하지 못합니다. 메모리 누수 또는 일반적인 객체 할당 대역폭 문제를 찾는 데 사용됩니다.

스택 메모리는 다양한 스레드의 호출 스택을 기반으로 할당되고 조사하기 쉬운 방법으로 구성되지 않았기 때문에 메모리가 표시되지 않는 도구가 없습니다.

마지막으로 JVM의 다양한 부분에서 사용되는 메모리 양에 대한 개요는 use jconsole as well입니다.

+1

또한 jdk에 포함되어있는 JVisualVM의 기능은 jconsole의 상위 집합입니다. 특히 VisualGC 플러그인을 사용하면 힙 메모리에 대한 멋진 시각을 제공합니다 ... – Holger

+0

감사. 실제로 jconsole은 JVisualVM @Holger에서 사용할 수없는 메모리 탭에 대한 몇 가지 추가 정보를 제공합니다. – Gray