
JVM은 RAM에서 실행되는데 Class Loader Subsystem이 class file을 RAM으로 가져온다. 이것은 Java's dynamic class loading functinality라고 불리며, 로드하고 링크하고 class file이 처음 실행될 때 (x 컴파일 시간) 초기화를 진행한다.
heap 영역은 스레드들 간에 공유하는 영역이며 객체의 인스턴스 변수, 배열들을 저장한다. 즉 힙 영역은 가비지 컬렉션의 타깃이 된다.
Garbage Collector 는 사용되지 않는 object를 메모리에서 제거한다. 함수를 통해 호출할 수 도 있다. System.gc( )
Interpreter는 Bytecode를 한 줄 한 줄 실행한다.
Jit Compiler 는 만약 하나의 메서드가 여러 번 반복해서 호출될 때 전체의 bytecode를 machine code로 바꾼다.
그다음 native 코드를 사용해서 실행한다. 한 줄 한 줄 실행하는 것보다 빠르다 native code는 캐시에 저장된다.
Java Naive Interface(JNI) 는 Native Method Livraries와 소통하기 위해 사용되는 인터페이스이다.
이것은 JVM이 C/C ++ 라이브러리 들을 호출 할 수/될 수 있도록 도와준다.
Native Method Livraries 는 C/C ++ Native Libraries의 모음이다.
JVM Threads
JVM은 여러개의 스레드를 실행한다. 주요 스레드는 main 스레드(puvblic static void main(String []))이다. 모든 스레드들은 이 main 스레드에 의해서 생성된다.
참조
medium.com/platform-engineer/understanding-jvm-architecture-22c0ddf09722
'안드로이드' 카테고리의 다른 글
ELF (0) | 2021.03.22 |
---|---|
Dalvik vs JVM (0) | 2021.03.08 |
JRE. JDK (0) | 2021.03.05 |
Java Bytecode 자바 바이트 코드 (0) | 2021.03.04 |