Java

[Java-15] JVM 개념과 구조

zamezzz 2017. 11. 18. 10:27

 JVM (Java Virtual Machine)



JAVA의 JVM이란 개념에 대해서 정리하겠습니다.


JVM이란 Java Virtual Machine의 약자로 어떤 하드웨어 및 OS에서든 자바 실행 코드의


변경 없이 JAVA 코드를 실행시킬 수 있게 해주는 가상 머신입니다.


JAVA는 어디서든 자바 바이트 코드를 해석하고 실행할 수 있도록 가상 머신 기반으로


작동하도록 설계되었는데요. 이 핵심 역할을 하는 것이 바로 JVM입니다.



JVM 구조


JVM구조를 먼저 그림으로 보겠습니다.


위 그림이 JVM의 전체 구조입니다. 


특히 JVM을 이해하는 데 있어서는 위에 있는 Java Source Code, Java Byte Code에 대해


이해하는 것이 중요합니다.


Java Byte Code


우리가 작성한 자바 소스코드는 컴파일러를 통해 바이트 코드로 변환됩니다.


자바 컴파일러는 다른 언어의 컴파일러 처럼 직접적인 기계어로 변환하는 것이 아니라


JVM을 위한 바이트 코드로 변환합니다. 그리고 JVM은 자바 바이트 코드를 실행합니다.


즉 JVM은 이 자바 바이트 코드를 이해하고 실행하기만 하면 됩니다.


그러므로 OS나 하드웨어에 의존적이지 않고 어디서든 프로그램 실행이 가능합니다.


그럼 이 JVM은 어떻게 실행되는 걸까요?


 JVM 실행 


한 문장으로 요약하자면 다음과 같습니다.


클래스 로더가 런타임 데이터 영역에 로드하고 실행 엔진이 실행한다.


위 JVM 구조 그림 그대로입니다. 너무 간단하죠? 좀 더 자세히 살펴보겠습니다.


- 클래스 로더

클래스 로더는 런타임에 클래스를 참조할 때 해당 클래스를 로드합니다.


클래스 로더가 클래스 로드를 요청 받으면 해당 클래스가 있는지 확인합니다.


만약 아직 로드되지 않은 클래스라면 검증->준비->분석의 과정을 거쳐 해당 클래스를


로드하고 초기화 시킵니다.


- 런타임 데이터 영역

런타임 데이터 영역은 JVM이 운영체제 위에서 실행되며 할당 받은 메모리 영역입니다.


클래스 로더가 로드한 클래스파일, 즉 자바 바이트 코드를 저장한다고 보면 됩니다.



- 실행 엔진

클래스 로더를 통해 JVM 내 런타임 데이터 영역에 할당된 바이트 코드를 실행합니다.


실행 엔진은 이 바이트 코드를 하나씩 읽어서 실행합니다.



이러한 3개의 과정을 통해 우리의 자바 코드가 처리되어 프로그램이 실행되는 것이죠.



JVM의 각 클래스 로더, 런타임 데이터 영역, 실행 엔진에 대해서는 조금 더 상세하게


살펴 볼 필요성도 있습니다.


복잡하고 이해가 어렵지만, 그 내부 구성 및 동작 방식을 이해한다면 많이 도움이 될 것


같기 때문입니다. 다만, 오늘은 JVM의 대략적인 개념에 대해서만 이해하고자 합니다.


다음 포스팅 기회가 된다면 좀 더 공부하여 자세히 정리하겠습니다.


감사합니다.

반응형

'Java' 카테고리의 다른 글

[Java-17] 자바 암호화 확장 정책 다운 및 설치  (4) 2018.05.08
[Java-16] Project language level 설정  (0) 2018.05.07
[Java-14] 어노테이션  (0) 2017.05.08
[Java-13] 제네릭  (0) 2017.03.18
[Java-12] 람다식 (Lambda)  (0) 2017.03.11