CS/Java

Java의 메모리 영역은?

No-ah98 2023. 3. 6. 13:07

배경 & 질문 의도

  • JVM 구조의 이해

답변

  • 메소드, 힙, 스택, pc 레지스터, 네이티브 영역으로 구분됩니다.
    • 메소드 영역은 클래스가 로딩될 때 생성되며 주로 static 변수가 저장됩니다.
    • 힙 영역은 런타임시 할당되며 주로 객체가 저장됩니다.
    • 스택 영역은 컴파일시 할당되며 메소드 호출시 지역변수가 저장됩니다.
    • pc 레지스터는 스레드가 생성될 때마다 생성되는 영역으로 다음 명령어의 주소를 알고 있습니다.
    • 네이티브 영역은 자바 외 언어로 작성된 코드를 위한 영역입니다.
  • 힙과 스택은 같은 메모리 공간을 동적으로 공유하며, 과도하게 사용하는 경우 OOM 이 발생할 수 있습니다.
  • 힙 영역은 GC 를 통해 정리됩니다.

키워드 & 꼬리 질문

  • Method Area (Class Area)
    • 클래스가 로딩될 때 생성됩니다.
    • 클래스, 변수, 메소드 정보
    • static 변수
    • Constant pool - 문자 상수, 타입, 필드, 객체참조가 저장됨
  • Stack Area
    • 컴파일 타임시 할당됩니다.
    • 메소드를 호출할 때 개별적으로 스택이 생성되며 종료시 해제 됩니다.
    • 지역 변수 등 임시 값이 생성되는 영역
    • Heap 영역에 생성되는 객체의 주소 값을 가지고 있습니다.
  • Heap Area
    • 런타임시 할당 됩니다.
    • new 키워드로 생성되는 객체와 배열이 저장되는 영역
    • 참조하는 변수가 없어도 바로 지워지지 않습니다. -> GC 를 통해 제거됨.
  • Java : GC, 컴파일/런타임 차이
  • CS : 프로세스/단일 스레드/멀티 스레드 차이

Reference)

https://velog.io/@shin_stealer/%EC%9E%90%EB%B0%94%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0