본문 바로가기
개발/JAVA

JVM(Java Virtual Machine)?

by 욤냠냠냠 2023. 3. 8.

2023.03.12 

 

직역하면 '자바를 실행시키기 위한 가상 기계(컴퓨터)'란 뜻이다.

Java는 OS(운영체제)에 종속적이지 않는 특징이 있는데 바로 JVM 때문이다.

 

자바는 OS(운영체제)에 영향을 받지않는다

자바프로그램은 JVM만 있으면 실행이 가능한데 JVM이 OS에게 메모리 사용권한을 할당받고 JVM이 자바프로그램을 호출,실행하게 된다. OS에게선 자유롭지만 ,JVM에게선 종속적이게 되었다. ( JVM을 실행시키고, JVM이 자바 프로그램을 실행시켜 OS에서 직접 제어 받는것보다는 속도는 느리다.) 

 

자바는 JVM만 설치되어있다면 어떤 운영체제에서든 실행 가능하다.

 

JVM의 실행과정과 구성

 

 

자바 프로그램 실행과정

 

1. IDE를 통해 자바 소스코드 작성( .java의 확장자 소스 파일)

2. java compiler가 소스코드(.java)를 바이트 코드( .class 확장자의 클래스 파일)로 변환.

3. Class Loader 를 통해 class  파일들을 JVM으로 로딩.

4. 로딩된 class 파일들은 Execution engine을 통해 실행.

4. JVM이 바이트 코드를 기계어로 변환하여 프로그램 실행.(기계어는 특정 언어가 아닌 CPU가 이해할 수 있는 언어이기 때문에,

CPU 제조사마다 기계어가 다를 수 있다.)

 

✨ java compiler는 JDK를 설치하면 bin 폴더에 존재하는 javac.exe이다. javac 명령어로 .java 를 .class 로 컴파일 할 수 있다.

 

JVM 구성

1. Class Loader

  • 클래스 파일을 로드하고 JVM 메모리에 적재하는 역할

2. Execution Engine

  • 로드된 클래스 파일의 바이트코드를 실행하는 역할.
  • JIT 컴파일러와 Interpreter 방식으로 나뉨. JVM은 인터프리터를 사용하다가 일정한 기준이 넘어가면 JIT 컴파일러를 사용하는 혼합방식 사용.
    • interpreter :인터프리터는 프로그래밍 언어의 소스 코드를 바로 실행하는 프로그램. 한 줄씩 수행하기 때문에 수행속도 느림.
    • JIT 컴파일러 : 인터프리터 방식의 단점을 보완하기위해 도입 . 바이트코드를 컴파일하여 native code로 변환하여 사용. 한번 컴파일된 코드는 빠르게 수행하게 되어 수행속도가 빠르나, 컴파일하는 과정에 비용이 들게됨.
✨ nativ code란 C, C++처럼 (JVM 같은)인터프리터 없이 운영체제가 읽을 수 있는 형태로 컴파일해 사용 가능한 코드.

3.Garbage Collector - GC(Garbage Collection) 작업 수행

  • 유효하지 않은 메모리인 Garbage 를 정리해주는 역할.
  • 더이상 사용되지 않는 인스턴스를 메모리에서 삭제한다.

4.Runtime Data Area : JVM이 프로그램을 수행하기 위해 OS로부터 별도로 할당받은 메모리 공간을 말함.크게 5가지 영역으로 나뉨.

 

  1. PC Register
    • 스레드가 다음 실행할 명령어의 주소를 저장하는 영역이고, 현재 수행중인 JVM의 주소를 갖는다.
    • 스레드가 시작될때 생성되며, 생성될때마다 생성되는 공간으로 스레드마다 하나씩 존재.
  2. JVM Stack
    • 메소드가 호출될때 메서드와 메서드의 정보는 JVM Stack에 쌓이게 됨. 즉 메서드의 매개변수와 지역변수, return 주소, 임시 변수등의 정보를 기록하는 스택
    • 각 스레드 별로 생성되기 때문에 다른 스레드는 접근불가
    • 메서드 호출이 종료되면 스택에서 정보들이 제거.
  3. Native Method Stack
    • 자바 외의 언어로 작성된 네이티브 코드들을 위한 스택.
    • Java Native Interface를 통해 호출되는 C/C++ 등의 코드 수행
  4. Method Area
    • JVM 이 로드한 클래스, 인터페이스, 메소드, 필드, 상수 등의 바이트 코드를 저장. JVM에 의해 공유되는 영역으로, 모든 스레드가 접근할 수 있음.
  5. Heap
    • Young Generation 과 Old Generation 으로 나뉨.
    • 객체의 생성 및 GC(Garbage Collection) 작업이 이루어짐.
    • new 연산자를 이용해 인스턴스를 생성하면 Heap에 저장

 

참고사이트

더보기

 

https://doozi0316.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80

 

[JAVA] JVM이란? 개념 및 구조 (JDK, JRE, JIT, 가비지 콜렉터...)

JVM이란 무엇인가 Java Virtual Machine의 줄임말. 직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다. Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되

doozi0316.tistory.com

 

https://devpad.tistory.com/56

 

자바의 구동 원리와 JVM(Java Virtual Machine)

자바 프로그램의 구동 원리 소스코드를 작성한다. (.java 확장자의 소스 파일) 컴파일러(javac.exe)가 바이트코드로 변환한다. (.class 확장자의 클래스 파일) 런처(java.exe)로 자바 가상 머신을 구동시

devpad.tistory.com

 

https://inpa.tistory.com/entry/JAVA-%E2%98%95-JVM-%EB%82%B4%EB%B6%80-%EA%B5%AC%EC%A1%B0-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD-%EC%8B%AC%ED%99%94%ED%8E%B8

 

[JAVA] ☕ JVM 내부 구조 & 메모리 영역 자세히 정리

저번 포스팅에서는 JRE / JDK / JVM에 대해서 간략하게 알아보는 시간을 가졌다면, 이번 포스팅에서는 JVM의 내부 구조에 대해 좀 더 자세하게 알아보도록 할 예정이다. JVM(자바 가상 머신)은 자바 언

inpa.tistory.com

 

https://code-lab1.tistory.com/92

 

[JAVA] JVM(Java Virtual Machine)이란?

JVM(Java Virtual Machine)이란? JVM은 Java Virtual Machine, 즉 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. JVM은 OS와 Java 애플리케이션 사이의 중개자 역할을 한다. JVM은 자바 바이트코드를 실행할

code-lab1.tistory.com

 

'개발 > JAVA' 카테고리의 다른 글

다형성  (0) 2023.04.18
오버로딩 과 오버라이딩  (0) 2023.04.11
ORM  (0) 2023.03.08