-
2. JVM 구조프로그래밍언어/Java(중급) 2020. 3. 26. 15:16
1. 클래스 로더 시스템
.class 에서 바이트코드를 읽고 메모리에 저장한다.
- 로딩: 클래스 읽어오는 과정
- 링크: 레퍼런스를 연결하는 과정
- 초기화: static 값들 초기화 및 변수에 할당
2. 메모리
- 메소드 : 클래스 수준의 정보 (pull package 이름, 클래스 이름, 부모 클래스 이름, 메소드, 변수) 저장. 공유 자원이다.
- 힙 : 객체를 저장. 공유 자원이다. (실제 인스턴스들을 저장)
- 스택 : 쓰레드 마다 런타임 스택을 만들고, 그 안에 메소드 호출을 스택 프레임이라 부르는 블럭으로 쌓는다. 쓰레드 종료하면 런타임 스택도 사라진다. (해당 쓰레드 내에 국한된다)
- PC(Program Counter) 레지스터 : 쓰레드 마다 쓰레드 내 현재 실행할 스택 프레임을 가리키는 포인터가 생성된다. (해당 쓰레드 내에 국한된다)
- 네이티브 메소드 스택 (해당 쓰레드 내에 국한된다)
- https://javapapers.com/core-java/java-jvm-run-time-data-areas/#Program_Counter_PC_Register
3. 실행 엔진
- 인터프리터 : 바이크 코드를 한줄 씩 실행. 한 줄 단위로 네이티브 언어로 바이트코드를 실행(비효율적)
- JIT(Just In Time 컴파일러) : 인터프리터 효율을 높이기 위해, 인터프리터가 반복되는 코드를 발견하면 JIT 컴파일러로 반복되는 코드를 모두 네이티브 코드로 바꿔둔다. 그다음부터 인터프리터는 네이티브 코드로 컴파일된 코드를 바로 사용한다.
- GC(Garbage Collector): 더이상 참조되지 않는 객체를 모아서 정리한다. 프로파일링시에 중요하다
4. JNI(Java Native Interface)
- 네이티브 메소드 사용 코드 -> 네이티브 메서드 스택생성 -> 네이티브 메소드 인터페이스를 호출하는 스택프래임 생성
- 자바 애플리케이션에서 C, C++, 어셈블리로 작성된 함수를 사용할 수 있는 방법 제공
- Native 키워드를 사용한 메소드 호출 ex) Thread.currentThread() C로구현되 있다.
네이티브 메소드 라이브러리
- C, C++로 작성 된 라이브러리
- Thread
reference
'프로그래밍언어 > Java(중급)' 카테고리의 다른 글
6. Spring에서 바이트 코드 조작 활용 예 (0) 2020.03.26 5. 바이트코드 조작마술 (0) 2020.03.26 4. 바이트코드 조작 (0) 2020.03.26 3. 클래스 로더 (0) 2020.03.26 1. JDK, JVM, JRE 이해하기 (0) 2020.03.26