2017-02-16 5 views
1

Java에서 객체는 힙에 저장되지만 메소드 로컬 변수는 스택에 있습니다. 하지만 jconsole을 열면 스택에 할당 된 메모리가 보이지 않습니다. 난 그냥 힙과 permgen (자바 6)을 참조하십시오. 스택은 물리적 인 것이 아니라 힙에서 논리적으로 분리되어 있습니까?힙에 논리 메모리 영역을 스택합니까?

+1

[JVM 힙의 프레임이 할당되었거나 스택이 할당 되었습니까?] (http://stackoverflow.com/questions/26741925/is-frame-in-jvm-heap-allocated-or-stack-allocated/26779782#26779782)) 및 [프로그래밍 방식으로 스택 메모리 통계를 얻는 방법은 무엇입니까?] (http://stackoverflow.com/questions/26835087/how-do-i-get-stack-memory-stats-programatically/26852490#26852490) – apangin

+0

제안 사항 가능한 한 빨리 Java 6에서 8로,'jconsole'에서'jmc'로 마이그레이션하십시오. –

+0

'jconsole'가이 정보를 표시하지 않는다고해서 스택 구성에 대한 결론을 허용하지 않습니다. – Holger

답변

1

JVM은 프로세스의 기본 스택을 사용합니다. 이 오버 헤드를 최소화하고, 스택이 가상 될 수 있습니다 대부분의 스택은 거의 많이 사용되지 않는 결과

(최대 < < 10 %)하고이를 그래프 (이 최대 실제로 사용되는 것보다 훨씬 더 큰 크기를 가질 수있다) 유용한 것보다 혼란 스러울 수 있습니다.

+0

'JVM은 프로세스의 네이티브 스택을 사용합니다. '나는 OS별로 프로세스에 할당 된 메모리를 의미한다고 생각합니다. 그런 다음 -Xms 및 -Xmx 매개 변수를 통해 언급 된 힙과 분리되어야합니다. ? – emilly

+0

@emilly 가상 메모리/주소 공간 만 할당됩니다. 이 문제가 발생하면 페이지가 실제 메모리로 바뀝니다. 최대 값을 10MB로 설정했지만 21KB 만 사용하면 6 * 4KB가 실제로 사용됩니다 (24KB) 스택의 최대 크기를 설정할 수 있습니다 이것이 거의 필요하지는 않지만'-Xss '와 함께. –

+0

죄송합니다. 총 4GB의 RAM이 있다고 가정 해보십시오. 힙에 1GB의 최대 메모리를 할당했습니다. 이제 어떤 이유로 든 스택에 512MB 메모리가 필요하다면 3GB (4-1)에서 할당 될 것입니다. – emilly

1

아니요 스택은 인수 값과 같은 메서드 호출과 관련된 정보를 보관하는 데 사용되는 메모리의 다른 영역이며 메서드가 반환 된 후 프로그램 흐름이 반환되어야하는 곳입니다.

+0

그런 다음 스택 영역 메모리 분석이 jconsole 등의 메모리 분석기 도구에 표시되지 않는 이유 – emilly

+0

@emilly 스택 크기가 거의 문제가되지 않는다면 도구에 어떤 내용이 표시됩니까? –

+0

메서드 호출마다 스택이 변경되어 반환됩니다. 분석기 툴에서 무엇을보고 싶습니까? –