JVM 구조

이연중·2021년 1월 21일
0

JAVA

목록 보기
2/20

클래스 로더 시스템
  • .class 에서 바이트 코드를 읽고 메모리에 저장
  • 로딩: 클래스를 읽어옴
  • 링크: 레퍼런스 연결
  • 초기화: static 값들 초기화 및 변수에 할당
메모리
  • 메소드 영역: 클래스 수준의 정보를 저장(클래스 이름, 부모 클래스 이름, 메소드, 변수)저장, 공유자원

  • 힙 영역: 객체를 저장, 공유자원

  • 스택 영역: 쓰레드마다 런타임 스택을 만들고, 그 안에 메소드 호출을 스택 프레임이라 부르는 블럭으로 쌓음

  • PC(Program Counter) 레지스터: 쓰레드마다 쓰레드 내 현재 실행할 스택 프레임을 가리키는 포인터 생성

  • 네이티브 메소드 스택(쓰레드마다): 메소드에 네이티브라는 키워드가 붙어있고, 구현을 자바가 아닌 C,C++로 한 것.

    네이티브 라이브러리를 쓰기 위해선 JNI를 통해야하는데, JNI를 사용하는 메소드 스택은 네이티브 메소드 스택에 저장

실행 엔진
  • 인터프리터: 바이트 코드를 한줄 씩 실행
  • JIT 컴파일러: 인터프리터 효율을 높이기 위해 인터프리터가 반복되는 코드를 발견하면 JIT 컴파일러로 반복되는 코드를 모두 네이티브 코드로 바꿔둔다. 그 다음부터 인터프리터는 네이티브 코드로 컴파일된 코드를 바로 사용한다
  • GC(Garbage Collector): 더이상 참조되지 않는 객체를 모아서 정리
JNI(Java Native Interface)
  • 운영체제의 모든 기능을 JVM이 담지 못한다. 운영체제의 고유기능(Native)을 운영체제가 구현된 언어 (nomally C,C++)로 구현

  • 자바 어플리케이션에서 C, C++, 어셈블리어로 작성된 함수를 사용할 수 있는 방법 제공

  • Native 키워드를 사용한 메소드 호출

네이티브 메소드 라이브러리
  • C, C++로 작성된 라이브러리

참고

https://www.inflearn.com/course/the-java-code-manipulation

profile
Always's Archives

0개의 댓글