Home /Java/ JVM
Post
Cancel

/Java/ JVM



📌 JVM


Java Virtual Machine

  • 자바가상머신으로 자바 프로그램 실행환경을 만들어 주는 소프트웨어
    • 컴퓨터가 자바 바이트 코드를 운영체제에 맞게 실행시키는 역할
    • Java와 OS(운영체제) 사이에서 중개자 역할
  • 자바로 작성된 모든 프로그램은 자바 가상 머신에서만 실행될 수 있으므로,
    자바 프로그램을 실행하기 위해서는 반드시 자바 가상 머신이 설치되어 있어야 한다.



📌 JVM의 특징


  • JVM의 역할 : 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행한다.
  • Java가 OS(운영체제)에 구애받지 않고 독립적으로 작동이 가능하다.
  • Garbage collection(가비지 컬렉션)을 통해 자동적인 메모리 관리를 해준다.
  • JVM은 스택 기반으로 동작한다.
  • 서로 다른 운영체제라도 자바 가상 머신만 설치되어 있다면,
    같은 자바 프로그램이 아무런 추가 조치 없이 동작할 수 있다.
  • 개발자는 한 번만 프로그램을 작성하면, 모든 운영체제에서 같이 사용할 수 있는 장점이 있다.
  • 단, 자바 프로그램과는 달리 자바 가상 머신(JVM)은 운영체제에 종속적이므로,
    각 운영체제에 맞는 자바 가상 머신을 설치해야 한다.
  • 자바 프로그램은 일반 프로그램보다 자바 가상 머신이라는 한 단계를 더 거쳐야 하므로,
    상대적으로 실행 속도가 느리다는 단점을 가지고 있다.

JVM



📌 JVM 구조


사진

1. Class Loader

  • 클래스 파일을 Runtime Data Area의 메서드 영역으로 불러오는 역할을 한다.
  • JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈입니다.
  • 런타임 시에 동적으로 클래스를 로드합니다.

사진

2. Execution Engine(실행엔진)

  • .class파일과 같은 ByteCode를 실행 가능하도록 해석한다.

3. Garbage Collector(GC)

  • 메모리 관리 기법 중 하나로, Heap 영역에 배치된 객체들을 관리하는 모듈이다.

사진

4. Runtime Data Area

  • 런타임 시 클래스 데이터와 같은 메타 데이터와 실제 데이터가 저장되는 곳이다.
  • 간단하게 말하자면 프로그램을 수행하기 위해 OS로부터 할당받은 메모리 영역을 의미한다. (Java 메모리 공간)
  • Runtime Data Area은 또다시 이렇게 나누어진다.
    • Method Area
    • Heap
    • PC Registers
    • Java Stacks
    • Native Method Stacks



📌 JVM의 작동원리


사진

자바 소스 파일은 자바 컴파일러에 의해서 바이트 코드 형태인 클래스 파일이 됩니다.
그리고 이 클래스 파일은 클래스 로더가 읽어들이면서 JVM이 수행됩니다.

  1. 자바로 개발된 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당합니다.

  2. 자바 컴파일러(javac)가 자바 소스코드(.java)를 자바 바이트코드(.class)로 컴파일합니다.

  3. Class Loader를 통해 JVM Runtime Data Area로 로딩합니다.

  4. Runtime Data Area에 로딩 된 .class들은 Execution Engine을 통해 해석합니다.

  5. 해석된 바이트 코드는 Runtime Data Area의 각 영역에 배치되어 수행하며 이 과정에서 Execution Engine에 의해 GC의 작동과 스레드 동기화가 이루어집니다.



📌 JVM이 필요한 이유


JVM은
자바 바이트코드를 실행할 수 있는 환경을 제공해주고,
이를 통해 자바 바이트 코드가
플랫폼에 독립적으로 어디서든 실행될 수 있게 되어
OS에 상관없이 어디서든 JAVA 애플리케이션을 실행할 수 있게 해주기 때문에 사용한다.




(참고)



공부한 내용을 여러글과 책 읽은 내용을 바탕으로 정리하고 있습니다.
좋은 글로 저의 공부에 도움을 주시는 분들께 감사드립니다.

This post is licensed under CC BY 4.0 by the author.