JRE(Java Runtime Enviroment)는 크게 API, JVM으로 구성이 되어 있어 있으며, 그중 JVM(자바 가상 머신, Java Virtual Machine)은 클래스 로더를 통해 자바 클래스를 메모리로 로드하여 자바API를 이용하여 실행 합니다.
Method안에서 선언한 로컬 데이터는 Thread로 부터 안전 하다는 의미는 JVM Stack에 저장 된 데이터로 해당 Thread에서만 사용 할 수 있기 때문 입니다. 또한그리고객체는 new연산자에 의해 메모리 heap에 생성 되고 JVM GC(Garbage Collector)에 의해 자동으로 Heap 메모리에서 해제 됩니다.
자바 실행 에서 종료
JVM Data Type : 기본 자료형 4 Byte로 이것이 플랫폼 독립성을 보장 합니다.
JVM 오류 - StrackOverflowError : Stack Frame에 Method를 추가 할 공간이 없을 때 발생 하면 JVM –Xss 옵션울 사용 하여 크기 조정 하여 해결 할 수 있습니다. - OutOfMemoryError : 실행 중인 Thread가 많아서 JVM Stack를 할당 할 수 없을 때 발생 합니다.
자바 실행과정 - 자바프로그램을 실행하면 JVM의 클래스 로더가 컴파일 된 자바 바이트코드(.class 파일)을 런타임 데이터 영역(Runtime Data Area)의 Method Area에 로드하고 실행 엔진(Execution Engine)이 이를 기계어로 변역 하면서 실행 합니다.
자바 실행 과정
JVM 상태
JVM Runtime Data Area - 운영체계로 부터 부여 받은 메모리 영역 - Method Area : : 모든 쓰레드가 공유 하는 영역, JVM이 시작 할 때 생성, 클래스와 인터페이스 Method에 대한 바이트 코드, 전역변수, 런타임 상수 등이 저장 됩니다. -> Main Method가 컴파일 된 Byte Code가 있습니다. - Heap Area : 객체를 저장 할 떄 사용 하는 영역 => 성능 고려 필요 - JVM Stack ( 임시 메모리 ) : 실행 시 Stack Frame이라는 각 쓰레드 마다 하나씩 할당되며 실행되는 메소드의 Stack Frame에는 지역변수, 메소드의 인자, 메소드의 리턴 값, 리턴 번지 등이 저장되고 Stack Frame은 메소드가 끝나면 사라집니다. - Program Counter Register : 쓰레드마다 하나씩 존재 : JVM의 명령어 주소 - Runtime Constant Pool : Method Area에 할당, 상수, 메소드, 필드를 저장하고 자바 프로그램이 참조 할 경우 메모리 주소를 찾아서 참조합니다. - Native Method Stack : 자바 이외의 언어로 작성된 코드를 위한 Stack ( C, C++ 등 )
jvm 내부
JVM Runtime Data Area
- 메소드 내에서 객체 참조 하면 선언한 변수는 지역변수로 Stack에 위치 하여 Heap에 저장 된객체에 대한 참조 값을 가집니다.