원티드 프리온보딩 백엔드 챌린지 - 1 주차 첫번째 수업 정리 -2

박경현·2023년 6월 8일
0

이번 블로그에서는 JVM을 구성하는 클래스 로더, Runtime Data Areas, 그리고 Execution Engine에 대해 적어보려고 한다

JVM 내부 형태와 JVM 아키텍쳐

JVM은 위 그림처럼 이루어져 있다고 한다

JVM 아키텍쳐

  • class Lodaders -> 바이트 코드로딩, 검증, 링킹 등을 수행
  • Runtime Data Areas -> 앱 실행을 위해 사용되는 JVM 메모리 영역
  • Execution Engine -> 메모리 영역에 있는 데이터를 가져와 해당 작업을 수행

클래스 로더 정의 그리고 동작 방식

java로 작성된 파일이 javac에 의해 컴파일 => 그리고 .class파일로 바뀜

그 다음에 클래스 로더에 의해서 Runtime Data Areas로 각각 알맞게 들어가게 된다!

Class Loaders는 바이트 코드를 동적으로 메모리에 로딩!
필요할때마다 필요한 클래스/리소스만 로딩한다

클래스로더의 로딩 작업

Loading : JVM에 필요한 클래스 파일 로드!
Linking : 로드된 클래스의 verify, prepare, resolve 작업 수행
initializing: 클래스 / 정적 변수 등 초기화

Runtime Data Area의 내부 각 메모리 영역들에 대한 설명

Method Area - 클래스의 메타데이터들이 들어감! (스레드끼리 공유)
Heap - 인스턴스화된 객체가 들어감(GC가 메모리 낭비 어느정도 관리!)
stack - 스레드마다 생성되는데, 메소드, 지역변수등이 들어감!
PC Register - 이것도 스레드 마다 생성되는데, 각 실행중인 명령에 대한 참조를 저장!

Execution Engine - JIT

인터프리터는 바이트 코드를 한줄 씩 읽으면서 OS가 실행할 수 있도록 기계어로 번역을 하는것 -> 초기 JVM

인터프리터 방식이어서 실행속도가 느림

JIT(Just in Time) - 동적 변환 방식을 사용해서 컴파일러됨 -> 이것도 이제는 같이 사용!!

이미 한번 읽어서 기계어로 번역한, 소스코드는 번역 안함!!
기계어로 변환된 코드는 캐시에 저장되기 때문에 다시 컴파일 안함

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글