본문 바로가기

STUDY/Java

Java | 자바 가상 머신 JVM(Java Virtual Machine)

Write once, Run anywhere.

 자바는 자바 가상 머신(JVM: Java Virtual Machine)을 통해 운영체제와 상관 없이 독립적으로 동작할 수 있습니다.

즉 운영체제에 맞는 JVM만 설치되어 있다면 어떤 운영체제에서도 동일한 실행결과가 나온다는 것입니다. JVM덕분에 개발자는 운영체제와 상관없이 자바 프로그램을 개발할 수 있습니다.

(JVM은 운영체제에 맞게 설치되어야 하며, JVM은 JDK혹은 JRE를 설치할 때 자동으로 설치됩니다.)

 

JDK? JRE?
JDK는 자발 개발 도구(Java Developmemt Kit)으로 프로그램 개발에 필요
JRE는 자바 실행 환경(Java Runtime Enironment)로 프로그램 실행에 필요

 

 JVM과 자바 프로그램의 실행단계를 보면, 개발자가 작성한 소스파일(Java Code)가 컴파일러(javac.exe)로 컴파일하면 확장자가 .class인 바이트 코드 파일이 됩니다. 이 바이트 코드 파일은 JVM구동 명령어(java.exe)에 의해 JVM에서 해석되고 해당 운영체제에 맞는 기계어로 번역되어 서로다른 운영체제에서도 동일한 실행결과가 나올 수 있게됩니다. 

 

https://www.viralpatel.net/java-virtual-machine-an-inside-story/

 

 

JVM의 구성

클래스 로더(class loader)

클래스 파일을 Runtime Data Area에 적재하는 역할. 동적으로 클래스를 로딩해줍니다.

https://javatutorial.net/jvm-explained

+)참고

 

Java Class Loaders Explained | Java Tutorial Network

This article explains the key components of Java class loaders. Java Class Loaders are essential part of Java Virtual Machine (JVM). They are used to load classes and interfaces. Althaout class loaders are integral part of JVM and they are very important f

javatutorial.net

 

자바 인터프리터(interpreter)

클래스 로더에 의해 JVM에 들어온 바이트 코드를 인터프리터가 읽습니다. 한줄 한줄 읽기 때문에 컴파일러보다 느린 속도. 하나의 메소드가 여러번 실행되는 경우, 호출 될 때 마다 해석한다는 단점을 가집니다.

+ JVM은 레지스터가 아니라 스택기반의 가상머신 'Last In, First Out'

 

 

JIT 컴파일러(Just-In-Time compiler)

인터프리터의 단점을 보완하는 역할. 반복되는 코드가 있다면 어느시점에 전체 바이트 코드를 컴파일해 네이티브 코드로 변환합니다. 이 네이티브 코드는 반복되는 메소드 호출에 사용되어 시스템 성능을 향상시킵니다.

https://medium.com/@caiquerodrigues/under-the-hood-of-the-jvm-part-1-8b10fae2a468

 

가비지 컬렉터(garbage collector)

참조되지 않은 객체를 수집하고 제거하는 역할. 개발자가 따로 메모리 관리를 하지 않아도 되게 해줍니다.

 

 

 

+) 참고

 

Under the Hood of the JVM — Part 1

First of all, you don't necessarily need to understand the JVM to be a Java developer. However, understand its internals can really…

medium.com

 

 

Wan Blog

WanBlog | 개발블로그

minwan1.github.io