Java

메모리 구조 (Method, Heap, Stack)

PT sun 2020. 3. 5. 01:23

* 모든 자바 프로그램은 자바가상머신(JVM)을 통해서 실행되는데,

이 자바 프로그램이 실행되면 JVM은 운영체제로부터 필요한 메모리를 할당받는다.

 

 

        Method = 클래스, 클래스 변수

        Heap = 객체, 인스턴스

        Stack = 메소드, 지역변수, 매개변수

 

 

 Method (클래스, 클래스 변수)

      =   자바 프로그램에서 사용되는 클래스에 대한 정보,

          클래스 변수가 저장되는 영역

          JVM 은 자바 프로그램에서 특정 클래스가 사용되면 해당 클래스의 클래스 파일(.class)을 읽어들여,

          해당 클래스에 대한 정보를 Method 에 저장

 

 Heap (인스턴스 변수, 동적할당) ; 낮은 주소에서 높은 주소로

     =   자바 프로그램에서 사용되는 인스턴스 변수 저장

          JVM 은 new 연산자를 통해 인스턴스를 생성하게 되면, 해당 인스턴스의 정보를 Heap 에 저장한다.

          Heap 은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.

          동적할당은 Heap 에 속한다.

 

            * 잠깐! 낮은 주소? 높은 주소?

                    = 메모리 낮은 주소 (0x00000000)

                    = 메모리 높은 주소 (0xFFFFFFFF)

                    * Heap 영역은 낮은 주소에서 높은 주소로

                    * Stack 영역은 높은 주소에서 낮은 주소로 

                    (서로 반대방향으로 데이터가 쌓여서 침범할 수도 있을 것 같지만, 괜찮음

                     Heap 과 Stack 영역 사이에 큰 빈 공간이 존재하기 때문에 그럴 일은 없다.)

 

 Stack (메소드의 스택프레임) ; 높은 주소에서 낮은 주소로

       =  JVM 은 자바 프로그램에서 메소드가 호출되면, 메소드의 호출과 관계되는 지역변수와 매개변수를 Stack 에 저장

           Stack 은 메소드의 호출과 함께 할당되며, 메소드 호출이 완료되면 소멸된다.

                   (즉, 메소드의 호출과 완료에 따라 할당과 소멸이 결정된다)

           Stack 은 push 동작으로 데이터를 저장

           Stack 은 pop 동작으로 데이터를 인출

           Stack 후입선출 (, 가장 마지막에 넣은 데이터를 가장 먼저 인출한다) 방식으로 작동한다.

'Java' 카테고리의 다른 글

SubString() ; 문자열 자르기 함수  (0) 2020.07.24
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener  (0) 2020.07.24
equals() 와 == 의 차이  (0) 2020.03.05
접근제한자  (0) 2020.03.05
Singleton  (0) 2020.03.05