개발 일지/Java

[Java] 자바 가상머신(JVM)

미숫가루설탕많이 2023. 1. 10. 14:04

 자바 가상머신(Java Virtual Machine, JVM)이란, 자바 프로그램 실행환경을 만들어 주는 소프트웨어이다.

 

 자바가 탄생하기 이전에는 C++이 프로그래밍 언어로 많이 사용되고 있었는데 이 C++은 운영체제로부터 독립적이지 못하다는 단점이 있었다. 만약 Windows를 위해 만든 프로그램은 Windows에서만 작동이 가능했고 Mac OS에서 그 프로그램을 실행시키려면 Mac OS에 맞게 새로 프로그램을 만들고 컴파일해야 한다는 것이다.

 

 이러한 문제를 해결하고자 탄생한 것이 자바이며, 자바는 C++처럼 객체지향 프로그래밍이 가능하면서도 운영체제로부터 독립되어있다. 이와 같은 운영체제로부터의 독립성은 JVM이라는 별도의 프로그램을 통해서 구현된다.

 

 즉, 자바는 JVM을 매개해서 운영체제와 소통하며 JVM이 자바 프로그램과 운영체제 사이에서 일종의 통역가 역할을 수행한다고 할 수 있다. JVM은 각 운영체제에 적합한 버전이 존재하며 이것이 자바가 운영체제로부터 독립적으로 동작할 수 있는 이유이다.

 

 

 

 

JVM 메모리 구조


 자바 소스 파일은 자바 컴파일러에 의해 바이트 코드 형태인 클래스 파일이 된다. 이 클래스 파일은 클래스 로더가 읽어들이면서 JVM이 수행된다. JVM의 구조는 크게 Garbage Collector, Execution Engine, Class Loder, Runtime Data Area로 나눌 수 있다.

 

  • Class Loder
    : JVM 내로 클래스 파일을 로드하고 링크를 통해 배치하는 작업을 수행한다.

  • Execution Engine
    : 클래스 로더를 통해 JVM 내의 Runtime Data Area에 배치된 바이트 코드를 명령어 단위로 읽어서 실행한다.

  • Garbage Collector
    : 힙 메모리 영역에 생성된 객체들 중에서 더 이상 사용하지 않는 객체를 찾아 삭제하거나 제거하여 메모리를 확보한다.

  • Runtime Data Area
    : JVM에 Java 프로그램이 로드되어 실행될 때 특정 값 및 바이트 코드, 객체, 변수 등 데이터들이 메모리에 저장되어야 하고 이 정보들은 Runtime Data Area이라는 메모리 영역에 담긴다. 이 메모리 영역은 크게 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack으로 구분되어 있다.

'개발 일지 > Java' 카테고리의 다른 글

[Java] JPA  (0) 2023.02.23
[Java] JDBC  (0) 2023.02.20
[Java] 스레드(thread)  (0) 2023.01.10
[Java] 스트림(Stream)  (0) 2023.01.06
[Java] 람다식(Lambda Expression)  (0) 2023.01.06