Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

Jun's Ark

[step-2] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. 본문

글 모음/IT기술

[step-2] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.

차가운보리차 2021. 3. 3. 07:33

JVM (Java Virtual Machine)

더보기

자바가상머신으로 바이트코드를 실행하는 주체이며 [운영체제 - JVM - .class] 행태로 가운데에 껴서 class 즉 프로그래밍을 어떠한 운영체제 에서도 돌아가게 해준다. 그냥 간단히 말하면 자바 코드의 최종 실행 환경. *.class 파일을 실행하는 런타임 환경

컴파일 하는 방법 : javac hello.c (javac는 JDK에 있음)

실행하는 방법 : java hello or java hello.java

 

(출처 : https://helloworld-88.tistory.com/16)
(출처 : https://jeongjin984.github.io/posts/JVM/)

 

- 바이트 코드 : .class 형태로 컴퓨터가 이해할 수있는 형태의 코드

(java 파일을 javac 라는 명령어를 통해 만들 수 있음)

 

- 인터프리트 vs 정적 컴파일러 : 인터프리트란 프로그래밍 언어를 읽으며 해당 기능에 대응하는 기계어 코드를 실행 하지만 정적 컴파일은 실행하기 전에 프로그램 코드를 기계어로 번역

 

- JIT 컴파일러 : 위의 두 가지 방식을 혼합한 방식으로 실행 시점에 인터프리트 방식으로 기계어 코드를 생성 하면서 그 코드를 캐싱하고 같은 함수가 여러 번 불릴 때 매번 기계어 코드를 생성하는것을 방지 한다.

 

- JVM 구성요소

1. Class Loader

2. GC (Garbage Collector)

3. Execution Engine

4. Runtime Data Area

 

1. Class Loader : JRE의 일부로 바이트코드를 실행할 때 class 객체를 메모리에 생성하는 요소이다.

Runtime 시점에 .class에서 바이트코드를 읽고 메모리에 저장

로딩 : 클래스를 읽어오는 과정

링크 : 레퍼런스를 연결하는 과정

초기화 : static 값들을 초기화 및 변수에 할당

 

(출처 :https://jeongjin984.github.io/posts/JVM/)

 

2. GC (Garbage Collector) : 자바는 메모리 관리를 사용자가 아닌 JVM이 알아서 해준다.

GC는 더이상 참조되지 않는 메모리를 정리해준다.

GC가 언제 호출되는지는 알 수 없으며, 심지어 사용자가 호출하더라도 메모리 정리할 필요가 없다고 판단하면 실행하지 않는다.

(GC정리 방법은 추가로 정리 필요)

 

3. Execution Engine : 메모리에 로드 된 바이트코드를 실행하는 역할을 한다.

Class Loader를 통해 Runtime Data Area에 배치된 바이트 코드는 Excution Engine에 의해 실행 된다.

인터프린터 방식이나 JIT 방식으로 실행한다.

 

4. Runtime Data Area : JVM의 메모리 영역

a. 클래스 영역 : 실행에 필요한 클래스들을 로드하여 저장한다. 내부에서 메소드 영역과 상수 영역으로 또 나누어 저장된다.

b. 가비지 컬렉션 힙 영역 : GC에 의해 관리되는 영역이다. 동적 메모리 할당 영역이라고도 하며, 소스상에서 new 연산자로 객체를 만들 때 할당되는 영역

c. 런타임 스택 영역 : 프로그램 실행 중 발생하는 메소드 호출과 복귀에 대한 정보를 저장한다.

d. 네이티브 메소드 스택 영역 : 자바에는 하드웨어를 직접 제어하는 기능이 없기 때문에 필요한 경우 C언어와 같은 다른 언어의 기능을 빌려 사용한다. 이때 사용하는 기술이 JNI (Java Native Interface) 기술로 네이티브 메소드들이 바이트 코드로 변환 되면서 사용되고 기록하는 영역