개발

JVM

ka0oll 2020. 3. 21. 00:53

JRE

  • 자바를 실행하기 위한 도구

JDK

  • JRE + 자바개발도구(컴파일러 등등)

메모리구조

heap
  • 객체를 저장
메소드 영역
  • 클래스 정보, static 변수
PC(Program Counter) 레지스터
  • 실행되야될 명령어 위치를 가지고있다. 쓰레드마다 생성
스택
  • 쓰레드마다 스택 생성, 메소드 호출 스택
네이티브 메소드 스택
  • 네이티브를 실행하기 위한 스택

자바 실행 순서

COMPILE
  • bytecode로 컴파일
클래스 로더
  • 필요한 class들을 동적으로 메모리에 올림, class path에 있는것들은 다올린다.
  • 힙에는 Class객체 생성
  • 메소드 영역에는 클래스 정보를
  • class로더 계층형 체이닝, 위에서 찾고 없으면 밑으로 위임
  • 부트스트랩 : java_home/lib 자바 코어 라이브러리
    • 플랫폼(익스텐션) 클래스 로더 : java_home/lib/ext
    • 어플리케이션 클래스 로더 : classpath에 있는 라이브러리
실행엔진
  • 인프리티러를 가지고 네이코드로 변경.
  • JIT 컴파일러 : 인터프리터 효율 높이기 위해 반복되는 바이트코드는 네이티브 코드를 캐시화