티스토리 뷰

Java/기본

006. JVM (Java Virtual Machine)

따강아지 2022. 2. 24. 22:44
  • 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에 저장 된
    객체에 대한 참조 값을 가집니다.
    - New 연산자는 Heap 메모리에 객체를 만들고 그 객체의 참조 값을 반환 됩니다.

'Java > 기본' 카테고리의 다른 글

008. 콘솔에 출력 하기  (0) 2022.02.25
007. 첫번째 프로그램  (0) 2022.02.25
005. 자바 프로그램 구조  (0) 2022.02.24
004. 자바 개발 TOOL 설치  (0) 2022.02.24
003. JAVA 설치  (0) 2022.02.24