0_ch4n
기계쟁이\n개발자
0_ch4n
0chn.xxx@gmail.com @0ch._.n
전체 방문자
오늘
어제

공지사항

  • All (282)
    • 🖥 CS (21)
      • 네트워크 (12)
      • 운영체제 (3)
      • 자료구조 (2)
      • Web (4)
    • 🧠 Algorithm (185)
      • [C] BOJ (93)
      • [JAVA] Programmers (91)
    • 📚 Study (69)
      • HTML&CSS (19)
      • MySQL (11)
      • JAVA (22)
      • Servlet&JSP (8)
      • Thymeleaf (2)
      • Spring (5)
      • JPA (2)
    • 📖 Book (1)
    • 📃 Certification (6)
      • 정보처리기사 (6)

인기 글

최근 글

최근 댓글

태그

  • Programmers
  • 코테
  • kakao
  • CSS
  • til
  • java
  • 카카오
  • 코딩테스트
  • 프로그래머스
  • 자바

블로그 메뉴

  • 홈
  • 태그
  • 방명록

티스토리

hELLO · Designed By 정상우.
0_ch4n

기계쟁이\n개발자

[JAVA] 자바의 메모리 구조
📚 Study/JAVA

[JAVA] 자바의 메모리 구조

2022. 4. 27. 19:19
반응형

✔️ Runtime Data Area

JVM의 구조에서 메모리 영역으로 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역입니다.

Method Area, Heap Area, Stack Area, PC Register, Native Method Stack, Runtime Constant Pool로 나눌 수 있습니다.

 

📌 Method(Static) Area

모든 스레드가 공유하는 메모리 영역으로 JVM이 시작될 때 생성되고 JVM이 종료될 때까지 유지됩니다.

  • 클래스와 인터페이스에 대한 Runtime Constant Pool
  • 메서드와 필드
  • static 변수
  • 메서드 바이트 코드

이 영역은 JVM 벤더마다 다양한 형태로 구현할 수 있으며 Oracle JVM에서는 Permanent Area 라고도 불립니다.

Method Area에 대한 Garbage Collection 또한 JVM 벤더의 선택 사항입니다.

 

📌 Heap

프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 메모리 영역입니다.

  • new 연산자를 통해 생성한 객체, 인스턴스, 배열

모든 스레드가 공유하는 영역이며 인스턴스 또는 객체를 저장하는 공간으로 Garbage Collection 대상이고

JVM 성능 등의 이슈에서 가장 많이 언급되는 공간으로 힙 구성 방식이나 GC 방법 등은 JVM 벤더의 재량입니다.

 

📌 Runtime Constant Pool

모든 스레드에서 공유하며 JVM 시작 시 생성되고 프로그램이 종료될 때까지 유지됩니다.

Method Area 영역에 포함되지만 독자적 중요성을 가지며 클래스 파일 constant_pool 테이블에 해당하는 영역입니다.

  • 클래스와 인터페이스 상수
  • 메서드와 필드에 대한 모든 레퍼런스

JVM은 런타임 상수 풀을 통해 해당 메서드나 필드의 실제 메모리 상 주소를 찾아 참조합니다.

 

📌 PC Register

각 스레드별로 생성되며 현재 스레드가 실행되는 부분의 주소와 명령을 저장하고 있는 영역입니다.

이것을 이용해서 스레드를 돌아가면서 수행할 수 있게 합니다.

 

📌 Stack Area

각 스레드별로 생성되며 선입후출(First In Last Out)구조로 {}나 메서드가 끝날 때까지 사용됩니다.

메서드 호출 시마다 하나의 스택 프레임이 생성되고 메서드가 종료되면 스택 프레임이 제거됩니다.

  • 지역 변수 배열(Local Variable Array)
  • 피연산자 스택(Operand Stack)
  • 현재 실행 중인 메서드가 속한 클래스의 런타임 상수 풀에 대한 레퍼런스

예를 들어 Person p = new Person(); 에서 Person p는 스택 영역에 생성되고 new로 생성된 클래스의 인스턴스는 힙 영역에 생성되며 스택 영역에 생성된 p는 힙 영역에 생성된 객체의 주소를 갖고 있습니다.

 

📌 Native Method Stack

각 스레드별로 생성되며 자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역입니다.

native interface 호출 시 생성되며 native interface 종료 시 제거됩니다.

  • native 메서드의 매개변수, 지역변수 등을 바이트 코드로 저장
반응형
저작자표시 (새창열림)

'📚 Study > JAVA' 카테고리의 다른 글

[JAVA] 객체지향개념1  (0) 2022.04.30
[JAVA] 변수, 타입, 형변환, 연산, 조건문&반복문, 배열  (0) 2022.04.29
[JAVA] 가비지 컬렉션(Garbage Collection)  (0) 2022.04.27
[JAVA] 자바 가상 머신 JVM(Java Virtual Machine)이란?  (0) 2022.04.27
[JAVA] JVM? JRE? JDK?  (0) 2022.04.27
    0_ch4n
    0_ch4n
    while(true) { study(); }

    티스토리툴바