본문 바로가기
Java

[Java] JVM(Java Virtual Machine)

by foreverever 2019. 4. 28.
반응형

JVM(Java Virtual Machine)

  • 물리적 컴퓨터가 아닌 가상의 컴퓨터

  • 소스코드(.java)가 컴파일 되어 생성된 바이트코드(.class)를 실행

  • 바이트코드는 JVM 위에서 OS와 상관없이 실행 (OS와 독립적)

  • Garbage Collector, Class Loader, Execution Engine, Runtime Data Area 총 4가지로 구성

(이미지 출처 : https://www.javamadesoeasy.com/2017/03/top-30-jvmjava-virtual-machine.html)

1. Runtime Data Area

  • JVM이 프로그램을 수행하기 위해 운영체제(OS)부터 별도로 할당 받은 메모리 공간

  • PC Register, JVM Stack, Native Method Stack, Method Area, Heap 5가지로 나뉜다.

  • Thread 마다 독립적으로 생성

    1. PC Register
    2. JVM Stack
    3. Native Method Stack
  • 모든 Thread 공유

    1. Heap
    2. Method Area

                                                     (Runtime Data Area)

2. Class Loader

  • 바이트코드(.class)를 JVM의 Execution Engine이 사용할 수 있도록 Runtime Data Area로 적재하는 역할
  • 런타임시 동적으로 바이트코드를 로드한다

3. Execution Engine

  • Class Loader를 통해 JVM 내의 Runtime Data Areas에 배치된 바이트코드를 기계어로 변경하여 실행

  • 기계어로 변경하는 방식은 Interpreter, JIT(Just-In-Time) compiler 2가지 존재

4. Garbage Collector (GC)

  • Java Application에서 사용하지 않는 메모리(Heap)를 자동으로 수거하는 기능

  • Heap 영역에 적재된 객체들 중 참조되지 않는 객체들을 탐색 후 제거

  • C의 경우 malloc, free등을 이용해서 메모리를 할당하고, 일일이 그 메모리를 수거해야 했음

  • C++의 경우 객체의 소멸자를 이용(delete 수행)해서 메모리를 일일이 수거해야 했음

  • Java에서는 GC 기술을 사용함에 따라서 개발자로 하여금 메모리 관리로부터 좀 더 자유로워짐

  • Minor GC, Major GC 2가지로 나뉨

 

적극적인 지적 환영합니다.

반응형

'Java' 카테고리의 다른 글

[Java] String = "" / String = new String("") 비교  (0) 2020.02.15
[Java] 상속  (1) 2019.05.05
[Java] 추상화  (1) 2019.05.02
[Java] 자바 프로그램 구동 및 실행 과정  (1) 2019.04.27
[Java] 클래스 vs 객체  (4) 2019.04.22