-
Notifications
You must be signed in to change notification settings - Fork 0
강승훈, 이지표, 조희승, 지찬우 JVM
huiseung edited this page Jul 10, 2024
·
4 revisions
- class 파일을 classloader 메모리에 올린다
- excution engine 이 public static main 메서드 부터 명령어를 수행
- System.out.println (PrintStream) 메서드 호출 → BufferedOutputStream.flush → FileOutputStream. write
-
FileOutputStream
write()
에서 native code인writeBytes()
호출 - 시스템콜이 표준 출력 파일에 내용을 쓴다.


- 정적 컴파일러: 실행전 기계어로 변환하는 컴파일러
- 동적 컴파일러(인터프리터): 실행중 기계어로 변환하는 컴파일러
- 자바는 컴파일러와 인터프리터 모두 해당
- javac 가 java 파일을 class(bytecode) 파일로 변환
- Loading
- 클래스 사용 시점에 로딩(동적 로딩)
- Bootstrap ClassLoader
- Extension CalssLoader
- Application Class Loader
- 클래스패스에서 클래스들을 찾아 Class 객체를 만들어 메모리에 로딩
- 클래스 사용 시점에 로딩(동적 로딩)
- Linking
- verify
- 클래스 파일의 이상 판단
- prepare
- field 자료형에 기본값 메모리에 적재
- resolve
- field 에 초기화한 값 할당
- verify
- Initialization
- static 블록 호출


- method area
- 각종 class, interface 정보(constructor, method, field)
- static
- constant pool
- heap area
- 인스턴스 적재 영역, method area를 가리킴(인스턴스 생성 때마다 클래스 정보를 적재하지 않아도 된다)
- stack area
- method call
- pc register
- 다음 실행할 명령어 위치한 주소
- native method stack
한 줄 씩 assembly 언어로 변환
- JVM은 코드 실행을 모니터링해 호출 횟수, 실행 시간, 메모리 사용량을 추적
- C1 compiler: 어떤 메서드의 호출이 특정 기준을 만족하면 byte 코드를 기계어로 컴파일
- C2 compiler: c1으로 컴파일한 코드의 호출이 특정 기준을 만족하면 컴파일 시간은 더 오래 걸리지만 실행 속도가 더 빠르게 최적화 하는 컴파일러
출처: https://www.baeldung.com/jvm-tiered-compilation
young area
old area

- jdk, java development kit
- 자바 개발하기 위한 도구
- jre + 개발도구(컴파일러, 디버거, 등)
- jre, java runtime environment
- 자바 프로그램을 실행하기 위한 환경
- JVM과 자바 클래스 라이브러리로 구성