1. JDK?

  1. [설명]
    1. Java 개발환경으로 Java Application을 개발하기 위해 필요한 도구를 제공합니다
    2. Java언어를 ByteCode로 Compile해주는 자바 컴파일러(javac), java class file을 해석해주는 역 어셈블리어(javap)등이 있습니다

2. JRE?

  1. [설명]
    1. Java 실행 환경으로 JVM, Java Class library, 기타 Java Application 실행에 필요한 File을 포함하는 것을 말합니다

3. JVM?

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