반응형
정의
Java기반의 프로그램들을 실행환경에 구별하지 않고 모든 것들을 실행시키는 역할
특징
-
플랫폼에 독립적
-
GC(Garbage Collection) : C에서 malloc(), free()통해 메모리를 수동적으로 관리했지만, Java에서는 자동으로 메모리를 관리
-
Stack기반의 가상머신
- JVM 구조 -
구성
-
Java Compiler에 의해 .java파일은 Byte Code인 .class파일로 변환
-
Class Loader는 JVM에서 실행할 클래스 파일의 내부 구조를 분석
-
Excution Engine은 클래스 로더를 통해 JVM내의 Runtime Data Area에 배치된 Byte code들을 명령어 단위로 실행
-클래스로드가 끝난 후 JVM은 main 메소드를 찾아 지역변수, 객체변수, 참조변수를 스택에 쌓음
-다음 라인을 진행하면서 상황에 맞는 작업 수행(함수 호출, 객체 할당 등) -
Runtime Data Area은 JVM메모리로 Java 어플리케이션이 실행하면서 할당받은 메모리영역
-
PC Register와 두 개의 Stack영역은 각 스레드 별로 생성, 메소드 Area와 Heap는 모든 스레드에 공유
런타임 데이터 영역
-
Method 영역 : 모든 스레드가 공유하는 영역으로 JVM이 시작될 때 생성. GC의 대상
저장되는 정보는 Type의 Byte Code, 모든 변수, 상수, Reference, Method Data 등이 포함
Class나 Instance, Interface의 초기화 때 사용되는 Class Variable과 Method와 생성자의 정보도 포함.
-
Runtime Constant Pool : 클래스와 메소드, 필드에 대한 모든 레퍼런스를 저장한다. JVM을 해당 메소드의 실제 메모리 상 주소를 찾아 참조시킴
-
Heap 영역 : Thread 고유의 정보는 Stack에 저장, Object와 Array객체만 저장되는 공간이다.
GC의 대상, Memory를 할당하는 Instruction(New, New Array, A New Array, Multi A New Array)으로만 존재 -
JVM Stack영역 : 각 스레드마다 하나씩 존재하며, 스레드가 시작될 때 생성. 스택 프레임이라는 구조체를 저장하는 스택
메소드가 호출될 때 필요한 변수들을 스택에 저장, 메소드 실행이 끝나면 스택 반환
Stack Frame에는 Method의 파라메터 변수, Local 변수, 연산의 결과 등이 저장됨
WAS나 Java Application에서 어떤 문제가 있을 때 ‘kill -3 pid'로 Stack Trace, Stack Dump를 얻어내어 분석함
-
PC Register : 각 스레드마다 하나씩 존재하며, JVM이 현재 수행할 명령어의 주소를 저장하는 레지스터
-
Native Method Stack : Native메소드(자바가 아닌 언어에서 제공되는 메소드,C,C++)를 호출하는 코드를 수행하기 위한 스택.
Java Stack과 Native Stack이 나뉘어져 있다 하더라도 Java Code를 수행하다 JNI(Java Naming Interface)를 호출하게 되면 Java Stack에서 Native Stack으로 Dynamic Linking을 통해 확장할 뿐이다.* Native Memory는 Process의 Memory공간에서 Heap, Method Area 등의 Java Runtime Memory를 뺀 만큼 사용할 수 있다.
Native Memory가 부족해도 OutOfMemoryError가 발생 될 경우, Java Runtime Memory를 줄이는 것, Native Memory Leak도 의심해 볼 것.
반응형
'JAVA & JVM' 카테고리의 다른 글
Garbage Collection Algorithm(가비지 컬렉션 알고리즘) (0) | 2022.08.30 |
---|---|
JAVA란? (0) | 2022.08.30 |
JAVA의 4가지 기술 (0) | 2022.08.30 |
네이티브 메소드 스택(Native Method Stack) 동작 방식 (0) | 2022.08.30 |
(~JDK1.7)Heap 메모리 구조와 특징, (JDK1.8)변화된 Heap 구조(Meta Space) (2) | 2022.08.30 |
댓글