원티드 프리온보딩 백엔드 챌린지 - 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개의 댓글

관련 채용 정보