본문 바로가기
Back-end/JAVA & Spring

[Java] JVM이란 무엇일까?

by 꼬바리 2021. 3. 25.

JVM이란?


자바 가상 머신(Java Virtual Machine)의 약자로서, 직역하자면 '자바를 실행하기 위한 가상 기계'라고 할 수 있습니다. '가상 기계'는 SW로 구현된 HW를 뜻하는 넓은 의미의 용어이며, 컴퓨터 성능이 향상됨에 따라 점점 더 많은 HW들이 SW화 되어 컴퓨터 속으로 들어오고 있습니다. 이와 마찬가지로 '가상 컴퓨터' 또한 실제 컴퓨터가 아닌 소프트웨어로 구현된 컴퓨터라고 생각하면 됩니다. 

 

하여튼, 자바로 작성된 에플리케이션은 모두 JVM에서만 실행되기 때문에 자바 에플리케이션이 실행되기 위해서는 반드시 JVM이 필요합니다. 일반 에플리케이션 코드는 OS만 거치고 HW로 전달되는데 비해 Java애플리케이션은 JVM을 한번 더 거치기 때문에, 그리고 실행 시에 해석(Interpret)되기 때문에 속도가 느리다는 단점이 있습니다. 하지만 최근에 컴파일된 자바코드인 바이트코드를 HW의 기계어로 바로 변환해주는 JIT 컴파일러와 향상된 최적화 기술로 인해 속도의 격차가 많이 줄게 되었습니다. 

 

이러한 단점도 있는 반면에, Java에플리케이션은 JVM과 상호작용을 하기 때문에 OS와 HW에 독립적이라 WORA가 실현이 가능한 것입니다. 하지만, JVM은 OS와 상호작용을 하기 때문에 해당 OS에 맞는 JVM이 필요합니다.

 

 

 

JVM의 메모리 구조 


응용 프로그램이 실행이 되면. JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리하게 됩니다. 그 중 3가지 주요 영역은 다음과 같습니다.

 

  • 메서드 영역 
프로그램 실행중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일을 읽어서 분석하여 클래스에 대한 정보와 그 클래스의 변수를 이곳에 저장한다.

 

인스턴스가 생성되는 공간이다. 프로그램 실행 중 생성되는 인스턴스들이 모두 여기에 저장된다. 즉, 인스턴스 변수들이 생성되는 공간이다. 

 

  •  호출스택  
호출스택은 메서드의 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면, 호출스택에 호출된 메서드를 위한 메모리가 할당되며, 이 메모리는 메서드가 작업을 수행하는 동안 지역변수(매개변수 포함)들과 연산의 중간결과 등을 저장하는데 사용되며, 메서드가 작업을 마치면 할당되었던 메모리공간은 반환되어 지워진다. 스택의 작동원리처럼 맨 위의 메서드가 현재 실행되는 메서드이며, 맨 위의 메서드가 완료된 후 메모리를 반납하고 그 밑에 있는 메서드가 실행이 된다. 당연히 아래에 있는 메서드가 위에 있는 메서드를 호출한 메서드이다.

 

 

JVM의 동작과정 


JVM

 

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

 

728x90
반응형

댓글