[Java] JDK, JRE, JVM 정리
✔ Java
- 썬 마이크로 시스템즈에서 개발하여 1996년 공식적으로 발표한 객체지향 언어
- 객체지향 언어이기에 설계 단계에서는 시간이 걸리지만, 유지보수에 용이함
- 운영체제에 상관없이 실행이 될 수 있다
✅ 컴퓨터가 자바를 이해하는 방법
- 컴퓨터는 0과 1의 숫자를 통해 명령을 처리한다.
- 즉, 우리가 인간이 이해하는 영역과, 컴퓨터가 이해하는 영역을 분리한다.
public static void main(String[] args) {
System.out.println("Hello World");
}
- 자바에서의 위 코드는 운영체제가 그대로 인식할 수 없다.
- 컴파일 과정을 통해 해당 코드는 바이너리코드로 변경이 된다.
- 이 때, 해당 고급 언어를 기계어 코드로 변경해주는 것이 컴파일러다.
- 운영체제는 해당 바이너리코드를 읽어들이고 명령을 수행한다.
✅ 0과 1의 조합은 운영체제마다 다르다
- 컴파일러에 의해 컴파일된 바이너리코드의 조합은 운영체제마다 다르다.
- 즉, 똑같은 0과 1이여도 운영체제에 따라 출력이 되지 않는 경우가 있을수있다.
- C언어의 경우 O/S(운영체제)에 따라 개별적인 컴파일러가 필요하다.
✔ 자바는 어떻게 하는가?
✅ 자바 컴파일러
자바는 다른 언어와는 다르게, 컴파일러 하나가 더 존재하는데 자바 컴파일러는 자바를 통해 나온 소스코드를 자바 가상 머신이 이해할 수 있는 자바 바이트 코드로 변환해주는 역할을 한다.
✅ JVM(Java Virtual Machine)
- 컴파일러에 의해 변환된 바이트 코드를 읽고 해석하는 역할을 하는 인터프리터.
- 바이트코드는 JRE(Java Runtime Enviroment) 위에서 동작한다.
- 자바로 작성된 모든 프로그램은 자바 가상 머신에서만 실행될 수 있으므로, 자바 P/G 실행을 위해서는 반드시 JVM이 설치되어 있어야 한다.
✅ 자바 애플리케이션 실행 시 JVM 동작 과정
- 프로그램 실행 시 JVM은 OS로부터 메모리를 할당.
- 자바 컴파일러(javac)가 자바 소스코드(.java)를 자바 바이트코드(.class)로 컴파일.
- Class Loader를 통해 JVM Runtime Data Area로 로딩.
- 로더에 의하여 로딩 된 .class들은 Execution Engine을 통해 Interpret(해석).
- 해석된 바이트 코드는 Runtime Data Area의 각 영역에 배치되어 수행, 이 과정에서 Execution Engine에 의해 GC의 작동과 쓰레드 동기화가 이루어짐.
✔ JVM(Java Virtual Machine) 구성 요소
- 클래스 로더(class loader)
- 실행 엔진(Execution Engine)
- Runtime Data Areas
- 가비지 컬렉터(garbage collector)
✅ Class Loader
- 자바 컴파일러에 의해 생성된 클래스 파일들을 묶는다.
- 후에, JVM이 운영체제로부터 할당받은 메모리 영역인 Runtime Data Area에 적재하는 역할을 수행.
✅ Execution Engine
- Class Loader에 의해 메모리에 적재된 클래스 코드를 기계어로 변경해 명령어 단위로 실행하는 역할.
- 명령어를 한 줄씩 실행하는 인터프리터 방식과 JIT 컴파일러를 이용하는 방식이 있다.
✅ Garbage Collector
- Heap Memory 영역에 생성된 객체들 중 참조되지 않는 객체들을 제거하는 역할.
- GC가 역할을 수행하는 시간은 언제인지 알 수 가 없다.
- GC가 수행되는 동안 GC를 수행하는 쓰레드가 아닌 다른 모든 쓰레드는 일시정지 된다.
✅ Runtime Data Area
- JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역.
- Method Area
- 모든 쓰레드가 공유하는 메모리 영역
- 클래스
- 인터페이스
- 메소드
- 필드
- static 변수
- Heap Area
- new 키워드로 생성된 객체 또는 배열
- GC가 참조되지 않는 메모리를 확인하고 제거하는 영역
- Stack Area
- 메서드 내에서 정의하는 지역변수의 데이터 값이 저장되는 공간
- 메서드가 호출될 때 메모리에 할당하고 종료되면 메모리가 해제된다
✔ JRE, JDK, JVM?
✅ JRE?
- 자바 실행 환경의 약자.
- JRE은 JVM + 자바 프로그램 실행에 필요한 라이브러리 파일의 집합.
- JRE에서 가장 중요한 요소는 자바 바이트코드를 해석하고 실행하는 JVM.
- JVM의 실행환경 구현.
✅ JDK?
- 자바 개발 도구의 약자
- JDK는 JRE + 개발을 위한 도구를 포함.
- 컴파일러, 디버그 도구 등이 포함.
- JDK를 설치하면 JRE와 JVM도 함께 설치.
- JAVA의 버전은 = JDK의 버전을 의미.
✅ LTS?
- 프로그램에는 특이하게 LTS(Long Time Support)라는 버전이 있다
- 즉, 오래 써도 되는 버전을 의미한다
✅ Java SE
- 자바 표준 에디션은 가장 기본이 되는 에디션입니다.흔히 자바 언어라고 하는 대부분의 패키지가 포함된 에디션
- 주요 패키지는 java.lang., java.io., java.util., java.awt., javax.rmi., javax.net. 등이 존재
✅ Java EE
자바로 구현되는 웹프로그래밍에서 가장 많이 사용되는 JSP, Servlet을 비롯하여, 데이터베이스에 연동하는 JDBC 그 외에도 JNDI, JTA, EJB 등의 많은 기술들이 포함되어 있다.
댓글남기기