오늘은 자바의 런타임 데이터 에리어에 관한 포스팅이다.
먼저, RunTime Data Atea란
JVM(Java Virtual Machine)이 프로그램을 수행하기 위해서 운영체제(OS)로부터
할당받은 메모리 영역이다.
위 그림 왼쪽의 자바 소스 파일에서 자바 컴파일러를 통해 컴파일 단계에서
Byte Code로 변환된다.
이는 JVM이 이해하고 실행할 수 있도록 변환 해주는
중간 코드이다.
이렇게 바이트 코드 즉, java class file로 변환 되었다면
이 개발자가 직접 작성한 소스 .class 파일이 JVM에서 실행이된다.
추가적으로 Run Time area의 오른쪽 맨 아래 위치한
Java API's class files는 Java 표준 라이브러리에서 제공하는
클래스 파일로 여러 기본 기능을 제공하는 클래스를 포함해준다.
즉, 이 표준 라이브러리에서 제공하는 클래스 파일은
Java에서 제공하는 것으로 개발자가 직접 작성해서
바이트 코드로 변환 된 소스코드가 아닌 것이다.
그리고 이렇게 JVM이 운영체제(OS)로부터 받은 메모리 영역은
아래와 같이 구성되어 있다.
출처 : (https://hongsii.github.io/2018/12/20/jvm-memory-structure/)
- 예시 설명 -
1. Class Loader Subsystem
- 역할: Java 클래스 파일을 메모리에 로드하여 JVM이 사용할 수 있도록 함.
- 쉽게 설명 : 사용자가 만든 클래스를 JVM이 알아볼 수 있도록 가져오는 역할.
- 데이터 예시: MyClass.class (사용자가 정의한 클래스)
- 흐름: MyClass.class → JVM 로드 → 메모리에 배치
2. Execution Engine
- 역할: JVM에서 바이트코드를 실행하는 엔진.
- 쉽게 설명 : 프로그램이 실제로 작동하게 만드는 엔진.
- 데이터 예시: 0x12345678 (바이트코드)
- 흐름: 바이트코드 0x12345678 → 해석 → 기계어로 변환 → 실행
3. PC Registers (개별 스레드 메모리 공간 존재)
- 역할: 현재 실행 중인 스레드의 바이트코드 주소를 기억.
- 쉽게 설명 : 지금 실행 중인 코드를 추적하는 주소 기억.
- 데이터 예시: 0xABCD (현재 메서드의 주소)
- 흐름: 메서드 호출 → PC 레지스터 업데이트 → 다음 바이트코드 주소로 이동
4. Java Virtual Machine Stacks (개별 스레드 메모리 공간 존재)
- 역할: 메서드 호출 시 로컬 변수와 중간 결과 저장.
- 쉽게 설명 : 메서드에서 사용하는 변수와 결과를 저장하는 곳!
- 데이터 예시: int x = 10; (로컬 변수)
- 흐름: 메서드 호출 → 스택 프레임 생성 → 로컬 변수 x 저장
5. Method Area
- 역할: 클래스와 메서드의 메타데이터 저장.
- 쉽게 설명 : 클래스와 메서드에 대한 정보를 보관하는 장소
- 데이터 예시: public static int myVar = 0; (클래스 변수)
- 흐름: 클래스 로딩 → 메서드 정보 저장 → 접근 준비
6. Heap
- 역할: 객체와 배열을 동적으로 할당.
- 쉽게 설명 : 프로그램이 사용할 객체와 배열을 저장하는 큰 공간
- 데이터 예시: MyObject obj = new MyObject(); (객체 인스턴스)
- 흐름: new MyObject() → 힙에 객체 할당 → 참조 저장
7. Native Method Stacks (개별 스레드 메모리 공간 존재)
- 역할: 네이티브 메서드 호출 관련 데이터 저장.
- 쉽게 설명 : 다른 언어로 작성된 메서드를 처리하는 공간.
- 데이터 예시: native void myNativeMethod(); (네이티브 메서드)
- 흐름: 네이티브 메서드 호출 → 스택 프레임 생성 → 매개변수 저장
근데.. 그냥 컴파일 언어들은 바이트 코드로 변환되고 이게 런타임 환경에서 실행된다 정도만 알면 될 듯!
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
접근 제어 지시자 (0) | 2024.10.11 |
---|---|
생성자(constructor) (3) | 2024.10.10 |
클래스(class) (0) | 2024.10.08 |
객체 지향(OOP)의 특징 (0) | 2024.10.04 |
객체 지향 프로그래밍(OOP, Object-Oriented Programming) (2) | 2024.10.04 |