본문 바로가기

Archived(CSE Programming)/Java

Java_메모리 구조

https://jeong-pro.tistory.com/148

자바의 메모리 구조에 앞서 실제 자바가 어떤 식으로 동작되는지에 대한 이해가 필요하다.

우리가 java 파일을 작성하여 javac 컴파일러에 의해 컴파일 하면 .class의 바이트 코드를 생성한다.

이러한 바이트 코드를 Class Loader를 통해 JVM에 적재하고 Execution Engine에 의해 실행 중 메모리를 관리하고 Garbage Collector에 의해 Heap 영역에서 사용되지 않는 메모리를 해제하는 구조를 지닌다.

 

1. Class Loader

.class의 바이트 코드를 엮어서 JVM의 Runtime Data area에 적재하는 역할을 한다.

2. Execution Engine

.class의 바이트 코드들을 기계어로 번역하여 실행 단위의 명령어로 실행한다.

(이 때, 명령어를 하나씩 번역하며 실행하는 인터프리터 방식

적절한 시간에 바이트코드를 원시코드로 컴파일하여 수행하는 JIT(Just In Time) 방식이 있다)

3.  Garbage Collector

GC는 Runtime Data area의 Heap 영역에서 참조되지 않는 객체들을 해제하는 역할을 한다. 언제 이러한 역할을 수행하는지 보장할 수 없다. 그리고 GC를 수행하는 쓰레드 외에 다른 쓰레드는 정지를 함.

4. Runtime Data Area

1) Method Area(Class Area)

App이 실행될때 생성된 Class, Static 변수, Final Class 등의 정보가 저장되는 공간.

구체적으로 메소드의 정보(이름, 반환형, 매개변수, 접근제어자), 클래스의 정보(접근제어자, 타입정보, 멤버 변수, 메소드 등), 상수 등의 정보가 저장된다.

 

2) Heap Area

Method 영역에 생성된 클래스들의 객체를 new 키워드를 통해 생성될 때 할당되는 공간

 

3) Stack Area

지역 변수, 매개 변수, 반환값, 연산 등에 활용되는 공간.

메소드가 새로 불릴 때마다 개별적으로 Stack 공간이 구성된다.

 

4) PC Register

쓰레드가 생성될 때 할당되는 공간

현재 실행 중인 쓰레드의 메모리 주소값이 들어있어 스레드를 교환해가며 사용가능

 

5) Native Stack Area

Java 이외의 언어로 작성된 원시코드를 위한 공간

C/C++을 수행하기 위한 Stack

 

 

참조 : https://jeong-pro.tistory.com/148

 

JVM 구조와 자바 런타임 메모리 구조 (자바 애플리케이션이 실행될 때 JVM에서 일어나는 일, 과정을 설명해줄 수 있나요?)

JVM(Java Virtual Machine) : 자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체다. CPU나 운영체제(플랫폼)의 종류와 무관하게 실행이 가능하다. 즉, 운영체제 위에서 동작하는 프로세스로 자바 코드를..

jeong-pro.tistory.com

 

'Archived(CSE Programming) > Java' 카테고리의 다른 글

Java 깊은 복사와 얕은 복사  (2) 2019.11.03
Java 마커 인터페이스  (0) 2019.11.03
Java 예외처리  (0) 2019.11.03
Java 컬렉션(Collection)  (0) 2019.11.03
Java 추상클래스, 인터페이스  (0) 2019.11.03