728x90
JVM이란?
- JVM(Java VIrtual Machine)은 자바 가상 머신으로 다양한 플랫폼(OS)위에 가상 머신 역할로 자바로 개발한 바이트 코드(.class 파일)가 실행될 수 있도록 런타임 환경을 제공하며 각 플랫폼별 JVM은 오라클이나 Open JDK 개발사들이 제공한다. 이렇기에 플랫폼 독립적인 언어
- JVM이 구동되면 OS에서 프로세스 형태의 Runtime instance로 구동된다.
- JVM의 주요 Task : 코드 로드/확인/실행, 런타임 환경 제공
- JVM 제공하는 기능 : 메모리 영역, 클래스 파일 형식, 레지스터 세트, 가비지 콜렉터, 치명적 오류 보고 등
JVM Architecture
- JVM 내부구조는 Class Loader, Memory Area, Execution Engine 을 포함한다.
- 동작 흐름 : 클래스 로더를 클래스 파일을 로드
- Class Area : Runtime의 Constant pool(상수 풀), Field, Method data, Method에 대한 코드, 클래스별 구조를 저장한다.
- Heap Area : Runtime의 객체가 할당되는 데이터 영역
- Stack Area : 주로 로컬변수를 저장하는 데이터 영역이다. 각 스레드별로, Private JVM Stack이 생성됨
- Execution Engine : 실행 엔진에는 다음과 같은 것들이 포함되어 있다.\
- Interpreter(인터프리터) : 바이트코드(.class 파일)를 기계(OS에 맞는)가 이해할 수 있는 형태(native code)로 해석하고 명령을 실행한다.
- JIT Compiler : Java의 인터프리터는 런타임에 바이트코드를 매번 읽어들여 해석하는 느린속도를 해결하기 위해 사용된다.
- 자주 실행되는 코드를 파악 > 동일한 코드를 매번 해석하지 않고 기계어로 컴파일해서 캐싱하여 재사용 > 성능을 향상시킨다.
- 실행 기록의 통계 정보로 자주 사용되는 코드들을 확인한다.
- Garbage Collecter : 더 이상 사용되지 않는 객체들을 수집하고 제거하는 역할
- Native Method stack : 응용프로그램에서 사용되는 Native Method 정보를 가지고 있고, 각 스레드 별로 개별 Native Method stack이 생성된다.
- Native Method interface : Native Method Libraries와 상호작용하며 Execution Engine을 위해 Native Libraries를 제공합니다.
Java ByteCode
- 자바컴파일러에 의해 생성되는 JVM 해석용 코드로 CPU에 의해 실행되지 않고 JVM이 Interpret 과정을 거쳐 OS에 전달하는 바이너리 형태의 명령어 코드
- JVM의 위한 언어로 JVM이 바이트 코드를 해석할 수 있는 한, JVM이 어떤 OS에 설치되어 있어도 동일하게 해석되고 동작된다.
- Disassemble the Code
- 컴파일된 Class의 바이트코드를 JDK에서 제공하는 JAVAP 커맨드로 역어셈블하여 클래스 파일내의 바이트코드 목록을 추출할 수 있고, 메소드의 목록을 간단히 볼 수 있다.
- 바이트코드는 사람이 쉽게 알아볼 수 있도록 문자화한 니모닉으로 되어있다.
- 인텔리제이 하단의 Terminal 탭을 클릭 > terminal 창에서 아래와 같이 입력
- cd our/production/EduExample/ch01
- javap -c HelloWorld
'아무거나 개발공부 > JAVA 기초다지기' 카테고리의 다른 글
20년차 개발자의 실무 개발 노하우를 담은 JAVA 기초 - 내 기준 정리 (0) | 2022.11.29 |
---|---|
java에서 모니터 사용하기 - synchronized (0) | 2022.11.07 |
JAVA 기초다지기 (3) - Class , Object, Instance 완벽 이해 (0) | 2022.07.28 |
JAVA 기초다지기 (2) - JAVA 프로그램 (0) | 2022.07.16 |
JAVA 기초다지기 (1) - Java Overview (0) | 2022.07.05 |