ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java의 메모리 영역
    Backend/Java and Trouble Shooting 2020. 2. 23. 17:20

    Java의 메모리 영역(정확히 말하면, 실행 시 데이터가 저장되는 영역(Runtime data area))은 다음과 같다.

    • pc (program counter) 레지스터 : 스레드별 보유
    • JVM 스택 : 스레드별 보유
    • 힙(Heap) : 대부분의 데이터가 저장되는 일반적인 저장소
    • 메서드 영역(Method Area)
    • 런타임 상수 풀(Runtime Constant Pool) : 메서드 영역에 할당되어 있음
    • 네이티브 메서드 스택(Native Method Stack)

    1. pc 레지스터 

    • 각 스레드의 JVM 인스트럭션의 주소가 저장되어 있다.

    2. 스택

    • 각 스레드마다 하나씩 존재하며, 스레드가 시작될 때 할당된다.
    • 메소드를 호출할 때마다 프레임(Frame)을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop)하는 동작을 수행한다.
    • 입후출(FILO, First In Last Out) 구조로 push와 pop 기능 사용
    • 메소드 호출 시 생성되는 스레드 수행정보를 기록하는 Frame을 저장
    • 메소드 정보, 지역변수, 매개변수, 연산 중 발생하는 임시 데이터 저장
    • 기본(원시)타입 변수는 스택 영역에 직접 값을 가진다.
    • 참조타임 변수는 힙 영역이나 메소드 영역의 객체 주소를 가진다.

    3. 힙

    • JVM이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 영역이다.
    • Heap Area는 JVM이 시작할 때 생성된다.
    • New 연산자로 생성된 객체 또는 객체(인스턴스)와 배열을 저장한다.
    • 힙 영역에 생성된 객체와 배열은 스택 영역의 변수나 다른 객체의 필드에서 참조한다.
    • 참조하는 변수나 필드가 없다면 의미 없는 객체가 되어 GC의 대상이 된다.
    • 힙 영역의 사용기간 및 스레드 공유 범위
      • 객체가 더 이상 사용되지 않거나 명시적으로 null 선언 시
      • GC(Garbage Collection) 대상
      • 구성 방식이나 GC 방법은 JVM 벤더마다 다를 수 있다.
      • 모든 스레드에서 공유한다

     

    더보기

    출처: https://hoonmaro.tistory.com/19 [훈마로의 보물창고]

     

    4. 메서드 영역 (Static Area)

    • 모든 JVM의 스레드를 공유하며, 각 클래스의 구조 정보를 저장하는 영역이다.
    • 런 타임 상수 풀, 필드, 메서드 데이터, 메서드와 생성자의 코드에 대한 정보가 저장된다.
    • 클래스와 인터페이스 인스턴스의 초기화를 위한 특수 메서드들에 대한 정보가 들어 있다.

    5. 런타임 상수 풀

    • 메서드 영역에 포함되지만 독자적인 영역이다.
    • 클래스와 인터페이스 상수, 메소드와 필드에 대한 모든 레퍼런스를 저장한다.
    • JVM은 런타임 상수 풀을 통해 해당 메소드나 필드의 실제 메모리 상 주소를 찾아 참조한다

    6. 네이티브 메서드 스택

    • 자바 언어 이외의 네이티브 언어를 호출할 경우 타 언어의 스택 정보를 바이트 코드로 저장한다.

    보통 일반적으로 우리가 개발하는 객체들은 힙 영역에 저장되며, 이 영역은 Young, Old, Perm 영역으로 나뉜다.


    https://hoonmaro.tistory.com/19

     

    마로의 Java(자바) 정리 - 8. 자바 메모리 구조

    JVM 구조 실행될 클래스 파일을 메모리에 로드 후 초기화 작업 수행 메소드와 클래스변수들을 해당 메모리 영역애 배치 클래스로드가 끝난 후 JVM은 main 메소드를 찾아 지역변수, 객체변수, 참조변수를 스택에 쌓..

    hoonmaro.tistory.com

    위 블로그에서 자바 실행 메카니즘에 대해 자세한 내용을 볼 수 있습니다.

     

    참고 자료: 자바 트러블 슈팅. 이상민 지음

Designed by Tistory.