0. 들어가기
2023.05.27 - [개발/Java] - Java에서 컴파일(compile)이란 무엇일까? JVM,JDK,JRE? 바이트코드?
이전에 자바공부를 시작하기 전에 간단하게 코드와 데이터, 자바의 컴파일과 JVM, JDK, JRE, IDE에 대해 알아봤다.
하지만 Java 문법 공부를 하다보니 자꾸 메모리라는 녀석이 튀어나오고, JVM이라는 것이 뭔지 제대로 알기 전에는 흰 옷에 튄 김치국물처럼 굉장히 불편한 마음이 지속되었다.
나는 파편화된 지식들을 늘려나가기 힘들어하는 편이다. 그래서 항상 내가 공부하는 것이 무엇인지를 명확히 알고, 어디서 튀어나온 것인지 알아야만 직성이 풀린다. 메타인지가 되어야 머릿속에 정리가 된다! 이게 뭔지도 모르면서 공부하면 공부의지가 팍 떨어진다. 그리하여 JVM에 대해 알아보도록 하겠다.
0.1 Virtual Machine이란?
JVM은 Java Virtual Machine이다.
자바 가상머신에 대해 공부하기 전에, 그냥 VM이라는 것이 무엇인지부터 알아보자.
Virtual machine(이하 VM)은 물리적 컴퓨터의 가상 으로 표현한 것이다.
VM은 게스트 머신, 물리적 컴퓨터는 호스트 머신으로 부를 수 있는데, 이게 무슨 뜻일까?
그림으로 보면 이해가 쉽다. 하나의 컴퓨터에서 마치 여러 컴퓨터가 있는 것처럼 가상으로 구성할 수 있고, 나뉜 VM 역시 컴퓨터로 취급되므로 OS가 그 위에 올라간다. 그림에서 나와있는 OS는 guest OS이다.
Host OS가 있고 그 위에 Hypervisor가 있는 것도 있고, 그냥 Hypervisor만 있는것도 있는데, 이건 나중에 가상화랑 컨테이너를 공부하면서 추가로 들어가기로 하고 넘어가자.
어쨌든 VM은 가상 컴퓨터인 것이다.
1. JVM이란?
JVM은 SW로 구현한 CPU이다 - 널널한개발자
유튜버 널널한개발자님의 Java공부 영상에서 나온 말이다. 이 말이 JVM을 이해하기가 가장 쉽다.
쉽게 말해 자바 프로그램을 돌리기 위한 컴퓨터를 프로그램으로 만들어 놓은 것이다.
개발자는 native단을 건들기 전까지는 JVM이라는 컴퓨터에서 자바 프로그램을 돌린다고 생각해도 되도록 만들어 놓은 것이다.
이것이 자바가 플랫폼에 종속되지 않고 플랫폼 독립성을 가질 수 있게 하는 이유이다. 윈도우던, 리눅스던 상관없이 JVM에서 돌아가게 하고 각 운영체제에 맞는 JVM이라는 컴퓨터(프로그램)을 깔아주기만 하면 해당 플랫폼에서 돌리는 것은 JVM이 알아서 해 준다.
2. 자바 실행 과정
대략적인 자바의 실행 과정을 살펴보자.
우선 개발자가 작성한 .java파일을 저장한다.
그 파일을 javac(자바 컴파일러)가 JVM이 읽을 수 있는 Java Byte Code(.class)로 컴파일한다.
이는 JVM이라는 가상 컴퓨터를 위한 것이며, 운영체제가 직접 실행할 수 있는 형태는 아니다.
JVM에서는 컴파일된 .class파일과 라이브러리를 링크하고, JVM의 runtime data area에 가져와 실행하게 된다.
일단 화살표로 class Loader에 가는 부분 까지만 이해하자.
3. JVM의 구조
박스쳐져있는 세 가지 구성요소가 JVM의 핵심이다.
Class Loader, Runtime Data Area(Memory area), Execution Engine. 이것들이 뭔지, JVM이 뭘 하는건지 알아보자
3.1 Class Loader(클래스 로더)
클래스 로더는 이름 그대로 컴파일된 .class인 자바 바이트코드를 JVM이라는 가상 컴퓨터에 올리는 역할을 한다.
세부 설명은 따로 정리하겠다.
2023.08.09 - [개발/Java] - [Java]자바의 Class Loader(클래스 로더)에 대해 이해해 보자
[Java]자바의 Class Loader(클래스 로더)에 대해 이해해 보자
0. 들어가기 JVM의 구조 중 Class Loader에 대해 쉽게 설명해 보자. 2023.08.09 - [개발/Java] - [Java]자바의 JVM에 대해 이해해보자 JVM의 구성요소 중 클래스 로더에 관한 설명이다. JVM의 전체 구조에 관해서
pabu.tistory.com
3.2 Runtime Data Area(실행 중 메모리 영역)
3.3 Excute Engine(실행 엔진)
Data Area에 있는 코드를 해석해 실행한다.
3.4 Native Method Interface(JNI)
3.5 Native Method Library
4. JVM의 영역과 실제 메모리의 관계
마무리
출처
'개발 > Java' 카테고리의 다른 글
[Java]자바의 Class Loader(클래스 로더)에 대해 이해해 보자 (0) | 2023.08.09 |
---|---|
[Java] Scanner 스캐너는 왜 close()를 해야 할까? (0) | 2023.07.25 |
[Java]자바의 반복문 (0) | 2023.07.21 |
[Java] 자바 조건문: If-else, Switch-case, Switch Expression (0) | 2023.07.21 |
[Java]자바의 연산자 (0) | 2023.07.19 |