자바 가상 머신(JVM)의 구조
1) 클래스 로더(ClassLoader) : 실시간으로 프로그램이 요구하는 클래스들을 자바 가상 머신으로 탑재하는 기능.
2) 실행시간 데이터 영역(RunTime Data Areas) : 프로그램을 실행시킬 때 사용하는 메모리 영역을 관리함.
- pc 레지스터 : 스레드 별로 사용하는 레지스터의 데이터를 보관하는 데 사용.
메소드가 자바 클래스 내 메소드가 아닌 네이티브 메소드라면, 일반 실행 프로그램처럼 커널에 의해 실행되기 때문에 자바 가상 머신에서 관리하지 않는다. 따라서 자바 가상 머신은 별도 네이티브 메소드를 위한 PC 레지스터 영역을 잡지 않는다.
- 자바 가상 머신 스택 : 스레드별로 별도 스택을 생성하고 관리하고, 스레드별로 생성된 스택은 스레드가 필요한 데이터를 저장하기 위해 프레임(frame)이라는 영역을 갖는다.
- 힙 : 자바는 new 지시어를 사용하여 언제 어느 때라도 클래스의 인스턴스를 생성시킬 수 있다. 프로그램이 실행되는 동안에 생성되는 클래스의 인스턴스나 배열들은 모든 스레드에서 공유하기 때문에 힙에 생성된다. 클래스 인스턴스의 삭제는 가지비 콜렉션이 객체를 가리키는 참조 변수가 존재하지 않는 인스턴스들과 배열들을 모아 한꺼번에 삭제된다.
- 메소드 영역 : 모든 스레드들이 공유하는 영역으로 텍스트 세그먼트(실행 코드인 바이트 코드들이 들어가는 영역)을 가리킴.
- 실행시간 상수 풀(Pool) : 프로그램 내부에 선언된 상수들을 따로 모아서 상수 풀에 보관함.
- 네이티브 메소드 스택 : 일명 C 스택이라 부르는 영역으로 바이트 코드가 아닌 기계어로 작성된 프로그램을 실행시키는 영역.
3) 실행 엔진(Excecution engine) : 클래스를 실행시킴.
'모바일 > 안드로이드프로그래밍' 카테고리의 다른 글
[C/C++] 안드로이드에서 C/C++로 개발해보기 - 자바 클래스 메소드를 호출해서 더하기 출력하기(w. 필드 아이디로 데이터 읽고 입력하기) (0) | 2022.08.19 |
---|---|
[C/C++] 안드로이드에서 C/C++로 개발해보기 - C++에서 받아온 문자열 출력하기 (0) | 2022.08.14 |
[C/C++] 안드로이드 fatal signal 11 (sigsegv), code 1 오류 해결 (0) | 2022.08.11 |
[C/C++] 안드로이드 NDK 개발 환경 (LLDB/CMake/NDK) -안드로이드 스튜디오 LLDB 없음 (0) | 2022.08.10 |
댓글