참고1 : https://medium.com/@lazysoul/jvm-%EC%9D%B4%EB%9E%80-c142b01571f2
참고2 : https://12bme.tistory.com/57

1. JVM?


  • 자바가상머신으로 번역
  • 코드를 OS가 이해할 수 있게 번역해주는 과정이 필요한데, 그것을 해주는 가상머신
  • 우리가 java문법을 통해 쓴 코드(.java)는 컴퓨터가 바로 이해할 수 없음
  • 우선 .java를 자바바이트코드(java byte code. 이진법으로 이루어진 코드)로 바꾸어 .class파일로 만들어줘야함
  • 바이트코드 역시 기계어가 아니기 때문에 컴퓨터가 바로 해석 불가
  • JVM은 OS가 바이트코드를 이해할 수 있도록 도와줌

2.JVM 특징


  • OS에 종속적이지 않음. 그렇기 때문에 java파일을 만들면 어떤 OS에서도 JVM을 통해 사용가능
  • JVM은 Class Loader, Runtime Data Areas, Excution Engine 크게 3가지로 구성

(사진출처:https://www.guru99.com/java-virtual-machine-jvm.html)

3. 파트별 구조


1)Class Loader

  • Runtime시, 클래스를 로딩하도록 도와주며 클래스 인스턴스 생성시 JVM Memory에 로드됨

2)Runtime Date Areas

  • 프로그램 수행을 위해 JVM이 OS로부터 할당받은 메모리 공간
  • 크게 5가지 영역
  • Heap : class의 instance 생성시, Heap에 저장됨
  • Method Area : 클래스,인터페이스,메소드,static 변수, 필드 등의 바이트코드를 담는 장소
  • 나머지 부분은 좀 더 공부 후에 업데이트..

3)Excution Engine

  • JIT Comipler, Garbage Collector로 구성
  • JVM 메모리에 담긴 바이트코드를 실행시키는 엔진
  • 명령어 단위로 읽어서 실행
  • 내부에 JIT(Just In Time) 컴파일러가 존재
  • JIT : JVM의 해석을 거치는 java코드는 c언어 같은 네이티브 언어에 비해 속도가 느린데, 이런 부분을 극복하게 해준 컴파일러
  • Garbage Collector : 여기서 가비지(쓰레기)는 메모리의 객체를 말함. 사용한 객체는 필요하지 않으면 메모리에서 제거되야 하는데, GC를 알아서 효과적으로 처리하도록 도와줌