Java 덤프와 스택의 차이점 상세 정보

3301 단어 Java쌓다창고
한 사람이 자바나 다른 프로그래밍 언어를 배우기 시작할 때 더미와 창고를 접하게 된다. 처음에 명확한 설명이 없기 때문에 많은 사람들이 더미가 무엇인지, 창고가 무엇인지, 창고와 창고가 어떤 차이가 있는지 의문을 가지게 된다.더 심각한 것은 자바에 창고와 같은 후진 선출 (Last In First Out) 순서의 데이터 구조가 존재한다는 것이다. 이것이 바로 자바다.util.Stack.이런 상황에서 많은 사람들이 앞의 문제를 더욱 이해하기 어려울 수밖에 없다.사실 더미와 창고는 모두 메모리의 일부분으로 서로 다른 작용을 하고 프로그램이 이 구역에서 메모리를 분배해야 한다.모두가 알다시피 모든 자바 프로그램은 JVM 가상 기기 내부에서 실행된다. 우리가 여기서 소개한 것은 자연히 JVM(가상) 메모리의 더미와 창고이다.
구별
자바 중적과 창고의 차이는 당연히 면접에서 흔히 볼 수 있는 문제이다. 아래 몇 가지는 그 구체적인 차이이다
각자가 그 직무를 담당하다
가장 주요한 차이점은 창고 메모리가 국부 변수와 방법을 저장하는 데 사용된다는 것이다.
메모리는 Java의 객체를 저장하는 데 사용됩니다.구성원 변수, 국부 변수, 클래스 변수를 막론하고 그들이 가리키는 대상은 메모리에 저장된다.
고유 또는 공유
창고 메모리는 하나의 라인에 귀속되고 모든 라인에는 창고 메모리가 있습니다. 그 저장된 변수는 그 소속 라인에서만 볼 수 있습니다. 즉, 창고 메모리는 라인의 개인 메모리로 이해할 수 있습니다.
메모리에 쌓인 대상은 모든 라인에 표시됩니다.메모리 중의 대상은 모든 라인에 접근할 수 있습니다.
예외 오류
스택 메모리에 사용 가능한 공간 저장 방법 호출과 국부 변수가 없으면 JVM은 자바를 던집니다.lang.StackOverFlowError.
메모리 더미에 사용할 수 있는 공간 저장소가 없는 경우 JVM은 자바를 던집니다.lang.OutOfMemoryError.
공간 크기
창고의 메모리는 더미 메모리보다 훨씬 작다. 만약 당신이 귀속을 사용한다면, 창고는 곧 가득 찰 것이다.재귀화가 제대로 이루어지지 않으면 StackOverFlowError 문제가 발생할 수 있습니다.
- Xss 옵션을 통해 창고 메모리의 크기를 설정할 수 있습니다. -Xms 옵션은 더미의 시작 크기를 설정할 수 있습니다. - Xmx 옵션은 더미의 최대 값을 설정할 수 있습니다.
이것이 바로 자바의 무더기와 창고의 차이이다.이 문제를 잘 이해하면 개발 중인 문제를 해결하고 메모리와 창고 메모리 사용을 분석하며 심지어 성능 개선에도 도움이 된다.
기본값 보기(Updated)
더미의 기본값을 보고 다음 코드를 사용하십시오. 여기서 Initial HeapSize는 맨 처음에 쌓인 더미의 크기이고 Max HeapSize는 더미의 최대값입니다.

13:17 $ java -XX:+PrintFlagsFinal -version | grep HeapSize
    uintx ErgoHeapSizeLimit                         = 0                                   {product}
    uintx HeapSizePerGCThread                       = 87241520                            {product}
    uintx InitialHeapSize                          := 134217728                           {product}
    uintx LargePageHeapSizeThreshold                = 134217728                           {product}
    uintx MaxHeapSize                              := 2147483648                          {product}
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
스택의 기본값을 봅니다. 여기서 ThreadStackSize는 스택 메모리 크기입니다.

13:21 $ java -XX:+PrintFlagsFinal -version | grep ThreadStackSize
     intx CompilerThreadStackSize                   = 0                                   {pd product}
     intx ThreadStackSize                           = 1024                                {pd product}
     intx VMThreadStackSize                         = 1024                                {pd product}
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
번역문 정보
원액 그대로의 영어 원문: http://javarevisited.blogspot.com.au/2013/01/difference-between-stack-and-heap-java.html.
번역문은 원문의 기초 위에서 수정, 정리, 삭제를 진행하였다.만약 흥미가 있으면 원문을 방문할 수 있다.P.S. 주소가 벽에 연결되었습니다.

좋은 웹페이지 즐겨찾기