1. JDK?
- [설명]
- Java 개발환경으로 Java Application을 개발하기 위해 필요한 도구를 제공합니다
- Java언어를 ByteCode로 Compile해주는 자바 컴파일러(javac), java class file을 해석해주는 역 어셈블리어(javap)등이 있습니다
2. JRE?
- [설명]
- Java 실행 환경으로 JVM, Java Class library, 기타 Java Application 실행에 필요한 File을 포함하는 것을 말합니다
3. JVM?
- [설명]
- Java 가상 머신으로 Java Application을 실행하는 가상 머신입니다
- 실제 컴퓨터로 부터 Java Application 실행을 위한 Memory를 할당 받아 Runtime Data Area를 구성합니다
- 인터프리터와 JIT 컴파일러를 통해 ByteCode를 각 OS에 맞는 기계어로 해석시켜 실행시키고, GC(가비지 콜렉터)를 통해 Application의 동적 Memory를 관리합니다
- [RunTime Data Area]
- [설명]
- Java의 가상머신은 프로그램 실행 중 다양한 Runtime Data Area를 사용합니다
- 모든 스레드들이 공유하는 영역과 스레드 별 할당되는 영역으로 구분되어 집니다
- JVM을 시작하면 Heap영역과 Method 영역이 생성되며 해당 영역들은 모든 스레드들이 공유합니다
- 각 스레드가 시작될 때마다 스레드마다 PC Register, Stack, Navtive Method Stack이 생성되며 스레드가 종료될 때 사라집니다
- 모든 스레드들이 실행되고 종료되면 JVM이 종료되면서 Heap영역과 Method영역도 사라집니다
- [PC Register]
- Java 가상 머신이 현재 실행중인 명령어의 주소를 저장합니다
- [Stack]
- Frame이라는 자료구조를 저장함을 말합니다
- C같이 전통적인 언어의 Stack구조와 비슷하고, 지역 변수, 함수의 실행결과를 저장하며 함수 호출과 반환을 담당합니다
- [Frame]
- Data, 반환 값을저장하는 자료구조입니다
- 함수가 호출될 때 생성되고 함수가 종료되면 사라집니다
- 지역변수 배열, Operand Stack, Run Time Constant Pool에 대한 참조값을 지닙니다
- Class File의 함수에대한 접근은 Runtime Constant Pool 에 존재하는 심볼릭 Link를 통해 접근 가능합니다
- 동적 할당은 코드 실행 시점에 심볼릭 링크를 해석해 고정된 주소값으로 변환시킵니다
- 심볼릭 링크를 통한 late-binding은 OOP의 핵심입니다
- [Native Method Stack]
- 다른 언어로 작성된 코드를 실행할 때 사용되는 Stack을 말합니다
- [HEAP]
- Class의 Instance들과 Array들이 저장되는 공간을 말합니다
- GC(가비지 컬렉션)라는 동적 Memory 관리 시스템에 의해 관리됩니다
- Heap 구성 방식, GC의 알고리즘은 JVM 구현체의 재량으로 자유롭게 구성되어 있습니다
- [Method]
- Runtime 상수 풀, Field, Function, Code등 Class와 Interface의 구조가 저장되는 공간을 말합니다
- [Runtime Constant Pool]
- Class, Interface마다 존재하며 Class File의 Constant Pool table영역이 저장되는 공간을 말합니다
- 각 Class, Interface의 전역 변수, function, instance value, function에 대한 심볼릭 링크가 존재합니다
- 전역 변수와 전역 함수는 컴파일 시점에 할당되어고정된 값으로 존재하며 Instance value와 Instance Function은 심볼릭 링크로 존재하며 실행 시점에 고정된 주소로 변환됩니다
- Class가 생성되어 Heap에 할당될 때 만들어지며 Class가 삭제되면 사라집니다