JDK

  • JDK는 자바 개발도구(Java Development Kit)의 약자
  • JDK는 JRE에서 개발을 위해 필요한 도구들을 포함

JRE

  • JRE는 자바 실행환경(Java Runtime Environment)의 약자
  • JVM구현하는 역할

JVM

  • JVM이란 자바가상머신 (Java Virtual Machine)의 약자를 줄여 부르는 용어
  • Java Byte Code를 OS에 맞게 해석해주는 역할
  • 컴파일된 바이너리 코드(.class)는 어떤 JVM에서도 동작시킬 수 있게 된다.

JVM Memory (Runtime Data Areas)영역에 대한 설명

  • Method Area : 메소드와 클래스 변수를 저장하기 위한 공간, 모든 프로그램에 의해 공유.
  • Heap Area : 사용자가 생성하는 Java Object들이 저장되는 공간, 동적으로 할당하여 사용되어짐.
  • Stack Area : 메소드 호출시 해당 메소드의 매개변수, 지역변수, 임시변수 등을 저장하기 위한 Stack 구조의 메모리.
  • Native Heap Area : Java Object가 아닌 Native Object들이 거주하는 공간. OS 차원에서 결정.
  • Permanent Space : Class에 대한 Meta 정보를 저장하는 공간. (Permanent Space는 Java Heap의 하위 영역)

JVM 구조

  • Class Loader
자바에서 소스를 작성하면 Person.java 처럼 .java파일이 생성됩니다.
.java 소스를 자바컴파일러가 컴파일 하면 Person.class 같은 .class파일이 생성된다.
이렇게 생성된 클래스파일들을 엮어서 JVM이 운영체제로부터 할당받은 메모리영역인 Runtime Data Area로 적재하는 역학을 Class Loader가 합니다.
  • Excution Engine
Class Loader에 의해 메모리에 적재된 클래스(바이트 코드)들을 기계어로 변경해 명령어 단위로 실행하는 역할을 한다.
명령어를 하나 하나 실행하는 인터프리터방식이 있고 JIT컴파이럴러를 이용하는 방식이 있다.
JIT컴파일러는 적절한 시간에 전체 바이트 코드를 네이티브 코드로 변경해서 Execution Engine이 네이티브로 컴파일된 코드를 실횅하는 것으로 성능을 높이는 방식이다.
  • Garbage Collector
Garbage Colector(GC)는 Heap메모리 영역에 생성(적재)된 객체들 중에 참조되지 않는 객체들을 탐색 후 제거하는 역할을 한다. GC가 역할을 하는 시간은 정확히 언제인지를 알 수 없다.
GC가 수행되는 동안 GC를 수행하는 쓰레드가 아닌 다른 모든 쓰레드가 일시정지된다.
Full GC가 일어나서 수 초간 모든 쓰레드가 정지한다면 장애로 이어지는 치명적인 문제가 생길 수 있다.

'JAVA' 카테고리의 다른 글

JAVA 생성자(Constructor)  (0) 2020.09.09
JAVA 객체지향 프로그래밍(OOP - Object Oriented Programming)  (0) 2020.09.04
JAVA의 배열 (Array)  (0) 2020.09.03
JAVA의 Data Types  (0) 2020.08.31

+ Recent posts