Java

[JAVA 1] JVM은 무엇이며, 자바 코드는 어떻게 실행하는 것인가.

simba 2021. 5. 15. 01:16

1. JVM 이란?

- Java Virtual Machine, 자바 가상 머신

- 다른 프로그램을 실행하는 것을 목적으로 하는 프로그램

- 자바 프로그램이 어느 기기, 어떤 운영체제 상에서도 실행될 수 있게 하는 것

- 자바 애플리케이션을 클래스 로더를 통해 읽어 들어 자바 API와 함께 실행하는 것

- 메모리 관리를 해주는 장점이 있다 (메모리 관리, Garbage Collection)

 

기술적 정의 : JVM은 코드르 실행하고 해당 코드에 대해 런타임 환경을 제공하는 소프트웨어 프로그램에 대한 사양

일반적 정의 : JVM은 자바 프로그램을 실행하는 방법. JVM 설정을 구성한 다음 설정 사항에 따라 실행 중인 프로그램 리소스를 관리

2. JVM을 알아야 하는 이유

- 메모리 구조를 알고, 메모리를 효율적으로 사용해야 하기 때문

 

3. JVM에서의 메모리 관리

가장 일반적인 상호작용은 힙(Heap)과 스택(Stack)의 메모리 사용을 확인하는 것

가장 흔한 교정작업은 JVM의 메모리 설정 값들을 조율하는 것

 

4. JVM 구성 요소

geeks for geeks

- 메서드 영역 : 프로그램 실행 중 어떤 클래스가 사용될 때, 해당 클래스의 클래스 파일을 읽고 분석하여 클래스에 대한 모든 정보와  static 변수가 저장됨

- 힙 : 객체가 생성되는 공간으로, 프로그램 실행 중 생성되는 인스턴스들이 모두 여기에 저장

- 스택 : 메서드의 작업에 필요한 메모리 공간을 제공. 메서드가 호출되면 호출된 메서드를 위한 메모리가 할당되며, 메서드가 작업을 수행하는 동안의 지역변수들과 연산의 중간결과 등을 저장하는 데 사용. 작업이 끝나면 메모리 공간은 반환되어 지워진다. 

 

5. JVM의 동작 과정

  1. 프로그램이 실행되면 JVM은 OS로부터 메모리를 할당받는다.
  2. 자바 컴파일러가 자바 소스코드를 읽어 들어 자바 바이트코드(. class)로 변환시킨다.
  3. Class Loader를 통해 class파일들을 JVM으로 로딩한다.
  4. 로딩된 class파일들은 Execution engine을 통해 해석된다.
  5. 해석된 바이트코드는 Runtime Data Area에 배치되어 실질적인 수행이 이루어지게 된다. 
  6. 위의 실행 과정 속에서 JVM은 필요에 따라 Thread Synchronization, GC 같은 관리 작업을 수행한다.

 

6. JIT 컴파일러

- JIT는 Just-In-Time의 약자로 말 그대로  그 순간 컴파일러라는 뜻 , 실행 시간에 바이트코드를 네이티브 코드로 변환해서 성능을 높여준다. 

- Java에서 컴파일을 하면 Bytecode로 변환이 되는데, 이는 기계가 바로 읽을 수 있는 형태가 아니다.

이 바이트코드를 실제 실행될 때 다시 한번 기계가 읽을 수 있는 형태(native code)로 interpreter를 통해 해석이 되어야 하는데

두 번의 과정을 밟는 이유는 java의 최대 장점 중 하나인 machine-independent 특성 때문.

(platfore independent라 도고 하는데 어떤 기계에서든 돌릴 수 있는 특성) 

 

 

7. JDK와 JRE의 차이

- JRE: Java Runtime Environment의 약자로 자바 프로그램을 실행시켜주는 환경을 구성해주는 도구로 즉, 개발할 필요는  없는데 실행시켜줘야 하는 경우에 쓰인다. 

   라이브러리, JVM, 애플릿을 돌리기 위해 필요한 컴포넌트 등으로 구성됨

- JDK: Java Development Kit의 약자로 말 그대로 자바 개발 시 필요한 툴킷을 제공하는 도구 모음이다.

   JRE + 컴파일러, 디버거 등 개발에 필요한 도구가 추가됨