CS/Java

JAVA - JVM

빈둥벤둥 2021. 2. 17. 20:15

JVM


JVM(Java virtual machine)

  • 자바 소스코드로 부터 만들어지는 자바 바이너리 파일(.class)을 실행할 수 있다.

  • 바이너리 코드를 읽고, 검증하고 실행하며 실행 환경의 규격을 제공한다.

 

구조

  1. Class Loader
    • 자바 파일(.java)이 생성되면 자바 컴파일러가(javac) 컴파일하여 바이트코드(.class)로 변환해 준다.
    • 이때 이러한 class파일들을 모아서 JVM이 OS로부터 할당받은 메모리 영역인 Runtime data area로 적재하는 역할을 한다.
  2. Execution Engine
    • class loader에 의해 메모리에 적재된 클래스(바이트코드)들을 기계어로 변경해 명령어 단위로 실행한다.
  3. Garbage Collctor
    • Heap 메모리 영역에 생성된 객체들 중에 참조되지 않은 객체들을 제거한다.
  4. Runtime Data Area
    • JVM의 메모리 영역으로 자바 애플리케이션 실행시 사용되는 데이터를 적재하는 영역이다.
    • 5가지 영역으로 구분된다.
      1. Method영역: 클래스 멤버 변수, 메소드 정보, type, static, final변수 등이 저장된다.
      2. Heap 영역: new 키워드로 생성되는 객체와 배열이 저장되는 영역. 
      3. Stack 영역: 지역변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등을 저장하는 영역.
      4. PC Register 영역: 쓰레드가 실행되는 부분의 주소와 명령을 저장하는 영역.
      5. Native Method Stack 영역: 자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역이다. 

 

reference

velog.io/@hono2030/JVM%EC%9D%98-%EA%B5%AC%EC%A1%B0

velog.io/@hygoogi/%EA%B8%B0%EC%88%A0-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8-%EB%AA%A8%EC%9D%8C#java

velog.io/@litien/JVM-%EA%B5%AC%EC%A1%B0