Kim Jinung 2023. 5. 12. 15:45

1. JDK, JRE 그리고 JVM

 

JRE(Java Runtime Environment)는 자바 바이트 코드를 실행하기 위한 JVM을 제공한다. 그리고 JDK는 추가적으로 .java 파일을 바이트 코드로 컴파일 하기 위한 javac(java compiler)와 개발에 필요한 기타 유틸리성 파일 들을 제공한다.


2. JVM

JVM은 크게 세 부분으로 구분할 수 있다.

 

  1. Class loader
  2. Memory area
  3. Execution engine

Class loader

Classloader

자바 컴파일러는 .java 파일을 컴파일한다. 그 결과로 .class 확장자를 가진 바이트 코드가 생성된다. 해당 바이트 코드를 JVM 메모리 영역에 올려주는 역할을 하는 게 클래스로더다. 

 

빌트인 클래스 로더는 3가지가 존재한다. 순서대로 더 상위 타입이다.

 

  1. BootStrap ClassLoader: String, util등 자바 기본 클래스 파일을 올려주는 로더, rt.jar 파일을 로드한다.
  2. Extension ClassLoader: JAVA_HOME/jre/lib/ext 경로에 위치하고 있는 클래스 파일을 올려주는 로더
  3. System/Application ClassLoader: 애플리케이션 개발을 위해 작성한 클래스를 올려주는 로더

애플리케이션 코드에서 String 클래스의 getClassLoader 메서드를 호출하면 null이 출력된다. String 클래스는 rt.jar 파일에 위치하고 있고, 이는 Bootstrap class loader가 메모리에 올려주기 때문이다.  (.jar 파일은 java archive의 약자)

Memory area

Memory area

  • Class area: 런타임 constant pool, field, method data 등을 저장하는 영역
  • Heap: 런타임 중 초기화되는 객체를 저장하기 위한 런타임 데이터 영역
  • Stack(Thread stack): 프레임을 저장하는 공간, 지역 변수와 부분 결과(메서드의 처리 결과)를 가진다. 메서드가 실행될 때마다 새로운 프레임을 만들고, 메서드 실행이 완료되면 프레임을 파괴한다. (단순하게 메모리 페이징처럼 스택 형태로 데이터를 저장하고 가져다 쓰고 파괴하는 스택을 생각하면 쉽다.)
  • Program Counter Register: 현재 실행 중인 JVM 지시자의 메모리 주소를 가지고 있는 영역
  • Native Method Stack: 앱에서 사용하는 네이티브 메서드(C, C++ 코드로 작성한 메서드)를 저장하는 영역. 해당 클래스를 올리는 것은 클래스로더가 아닌 운영체제가 담당한다. JVM은 네이티브 메서드를 실행하기 위해서 JNI를 제공한다.

*프로세스는 메모리에 배치 될 때 텍스트 섹션, 데이터 섹션, 힙 섹션, 스택 섹션을 가진다. 여기서 텍스트 섹션은 소스 코드, 데이터 섹션은 전역 변수를 저장하는 영역인데, JVM은 클래스 영역이 소스 코드 저장과 전역 변수 저장을 동시에 담당한다.

Execution engine

Excution engine

  • Virtual processor
  • Interpreter: 바이트 코드 스트림을 읽고 PC Register가 가리키고 있는 지시자를 실행함
  • Just-In-Time Compiler(JIT Compiler): 비슷한 기능을 가진 바이트 코드를 동시에 컴파일해서 컴파일 타임을 감소시키는 방법으로 컴파일 성능을 향상시킨다.

Java Native Interface(JNI)

C, C++, 어셈블리 언어 등으로 작성된 애플리케이션과 커뮤니케이션하기 위한 인터페이스를 제공하는 프레임워크.

자바는 JNI 프레임워크를 사용해서 콘솔 아웃풋으로 내보내거나, OS 라이브러리와 상호작용한다.


References

1. JDK, SRE and JVM

https://www.javatpoint.com/jvm-java-virtual-machine

 

JVM | Java Virtual Machine - Javatpoint

Java Virtual Machine. Let's learn what is JVM with its internal architecture with inheritance, polymorphism, abstraction, encapsulation, exception handling, multithreading, IO Streams, Networking, String, Regex, Collection, JDBC etc.

www.javatpoint.com

 

2. JVM: Java Virtual Machine

https://www.javatpoint.com/jvm-java-virtual-machine

 

JVM | Java Virtual Machine - Javatpoint

Java Virtual Machine. Let's learn what is JVM with its internal architecture with inheritance, polymorphism, abstraction, encapsulation, exception handling, multithreading, IO Streams, Networking, String, Regex, Collection, JDBC etc.

www.javatpoint.com