[정리] Java Virtual Machine 메모리 구조에 대해 알아보자. (2)

Wook _·2023년 9월 6일
0

정리

목록 보기
5/13

JVM Memory!

이전 포스트에서는 JVM 자체에 대한 소개를 했었다.

해서 이번에는 JVM의 주요 부분 중 하나인 메모리 구조에 대해 알아보도록 하자.

우선 시작하기에 앞서 간단하게 JVM이 어떻게 동작하는 구조인지 알아보자.

JVM의 구조는 크게 Garbage Colltector, Execution Engine, Class Loader, Runtime Area로 4가지로 나눌 수 있다.

JVM은 자바 소스 파일이 자바 컴파일러에 의해 바이트 코드 형태인 클래스 파일이 된다. 이때 클래스 로더가 클래스 파일을 읽어들이면서 JVM이 실행된다.

Class Loader와 Execution Engine은 이전 포스트에서 설명했으므로 넘어가고 Garbage Collector은 다음 포스트에서 다룰것이다.

이번 포스트에서 우리가 중요하게 볼 부분은 Runtime Area이다.


Runtime Data Area

Runtime Data Area는 JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터를 저장하기 위해 운영체제로 부터 할당받는 메모리이다.

런타임 데이터 영역은 크게 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack으로 나누어진다.

각 영역에 대해 알아보자.

Method Area
JVM이 읽어들인 클래스와 인터페이스들의 런타임 상수 풀이다.

해당 영역은 클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보와 같은 각종 필드 정보들과 메서드 정보, 데이터 타입 정보, 상수 풀(Constant Pool), static 변수, final 클래스 등이 생성되는 영역이다.

JVM 시작 시 생성되며 프로그램이 종료될때까지 유지된다.
명시적으로 null 선언 시 GC 대상이 된다.

모든 쓰레드가 공유하는 메모리 영역이다.

Heap Area
모든 쓰레드가 공유하며, 프로그램 런타임 시 동적으로 할당하여 new 키워드로 생성된 객체와 배열, 인스턴트가 생성되는 영역이다.

메소드 영역에 로드된 클래스만 생성이 가능하고 GC가 참조되지 않는 메모리를 확인하고 제거하는 영역이기 때문에 JVM에 의해 관리된다.

객체를 더 이상 쓰지 않거나, 명시적으로 null 선언 시 GC 대상이 된다.

모든 쓰레드가 공유하는 메모리 영역이다.

Stack Area
메서드 호출 시마다 각각의 스택 프레임을 생성한다. 그리고 메서드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값과 같은 임시 데이터를 저장한다. 또한 메서드 수행이 끝나면 프레임 벼롤 삭제한다.

Stack 구조이므로 먼저 들어온 것이 가장 마지막으로 나가는 구조(FILO)이다.

각 쓰레드별로 생성된다.

PC Register
쓰레드가 시작될때 생성되며, CPU의 명령어인 Instruction을 수행한다. CPU Instruction을 수행하는 동안 필요한 정보를 CPU내 기억장치인 레지스터에 저장하며, 연산 및 결과값을 메모리에 전달하기 전 CPU내 기억장치이다. 현재 실행중인 JVM 명령의 주소를 갖는다.

각 쓰레드별로 생성된다.

Native Method Stack
자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역이다.
C/C++ 등의 코드를 수행하기 위한 스택으로 native 메서드의 매개변수, 지역변수 등을 바이트코드로 저장한다.

Native Interface 호출 시 생성되거나 Native Interface 종료 시 생성된다.

각 쓰레드별로 생성된다.


이상으로 JVM의 메모리 구조에 대해 살펴보았다.

다음 포스트로는 Garbage Collector에 대해서 살펴볼 것이다.

끝!


출처

https://steady-coding.tistory.com/305
https://inpa.tistory.com/entry/JAVA-%E2%98%95-JVM-%EB%82%B4%EB%B6%80-%EA%B5%AC%EC%A1%B0-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD-%EC%8B%AC%ED%99%94%ED%8E%B8#%EB%9F%B0%ED%83%80%EC%9E%84_%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%98%81%EC%97%AD_runtime_data_area
https://hyoje420.tistory.com/2

profile
책상 위에 있는 춘식이 피규어가 귀엽다.

0개의 댓글