아래 글들은 https://d2.naver.com/helloworld/1230
로 공부하며 정리하였습니다.
JVM Internal
자바 바이트코드는 JRE
위에서 동작한다. 이 JRE
에는 자바 바이트코드를 해석하고 실행하는 JVM(Java Virtual Machine)
이 있다. JRE
는 자바 API
와 JVM
으로 구성되며, JVM의 역할은 자바 어플리케이션을 Class Loader
를 통해 읽어들여 자바 API와 함께 실행하는 것이다.
Vitual Machine
프로그램을 실행하기 위해 컴퓨터와 유사한 기계를 소프트웨어로 구현한 것이라 할 수 있다. 원래 자바는 WORA(Write Once Run Anywhere)
를 구현하기 위해 물리적인 머신과 별개의 가상 머신을 기반으로 동작하도록 설계되었다. 그래서 자바 바이트코드를 실행하고자 하는 모든 하드웨어에 JVM
을 동작시킴으로써 자바 실행 코드를 변경하지 않고도 모든 종류의 하드웨어에서 동작되게 한 것이다.
JVM의 특징
스택 기반
의 가상 머신 : 대표적인 컴퓨터 아키텍처인인텔x86 아케텍처
나ARM 아키텍처
와 같은 하드웨어가레지스터 기반
으로 동작하는 데 비해JVM
은 스택 기반으로 동작 한다.심볼릭 레퍼런스
: 기본 자료형(primitive data type
)을 제외한 모든 타입(클래스와 인터페이스)을 명시적인메모리 주소 기반의 레퍼런스
가 아니라심볼릭 레퍼런스
를 통해 참조한다.가비지 컬렉션
:클래스 인스턴스
는 사용자 코드에 의해 명시적으로 생성되고가비지 컬렉션
에 의해 자동으로 파괴된다.- 기본 자료형을 명확하게 정의하여
플랫폼 독립성 보장
: C/C++ 등의 전통적인 언어는 플랫폼에 따라 int형의 크기가 변한다.JVM
은기본 자료형을 명확하게 정의
하여호환성을 유지
하고플랫폼 독립성을 보장
한다. - 네트워 바이트 오더(network byte order) : 자바 클래스 파일은 네트워크 바이트 오더를 사용한다. 인텔x86 아키텍처가 사용하는 리틀 엔디안이나, RISC 계열 아키텍처가 주로 사용하는 빅 엔디안 사이에서 플랫폼 독립성을 유지하려면 고정된 바이트 오더를 유지해야 하므로 네트워크 전송 시에 사용하는 바이트 오더인 네트워크 바이트 오더를 사용한다. 네트워크 바이트 오더는 빅 엔디안이다.