본문 바로가기

안드로이드

JVM

 

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