티스토리 뷰
JDK/JRE
1. 개념
- JDK(Java Development Kit): 개발자들이 자바로 개발하는 데 사용하는 SDK키트.
- SDK(Software Development Kit): OS, H/W에서 제공하는 툴
ex) 안드로이드 스튜디오
2. 버전
- Java SE: 가장 기본이 되는 표준 에디션의 자바 플랫폼으로 자바 언어 핵심 기능 제공
- Java EE: 대규모 기업용 에디션으로 기업환경을 위한 대규모 솔루션 개발
- Oracle JDK
- Open JDK
- Amazon Corretto
3. JDK 디렉토리 구성요소
- bin: 자바 개발, 실행에 필요한 도구와 유틸리티 명령
- javac: 자바 컴파일러로 자바 소스를 바이트코드로 컴핑
- java: 자바 인터프리터
- jar: 자바 클래스 파일을 압축한 자바 아카이브 파일
- lib: 실행 시간에 필요한 라이브러리 클래스들
4. JRE(Java Runtime Environment)
- JRE: 자바 실행환경의 약자로 JVM과 자바 프로그램을 실행 시킬 때 필요한 라이브러리 API를 함께 묶어서 배포하는 패키지
- JRE는 기본적으로 JDK에 포함되어 있다. 자바 프로그램을 직접 개발하려면 JDK가 필요하고, 컴파일 된 Java 프로그램을 실행시키려면 JRE가 필요하다.
- 자바 프로그램 실행 과정: 소스코드 .java를 작성한다. => 컴파일러는 .java를 바이트 코드인 .class 파일로 생성한다. => JVM은 .class 바이트 코드를 해석하여 바이너리 코드로 변환하고 프로그램을 수행
JVM(Java Virtual Machine)
1. 정의
- 자바 가상머신, 자바를 돌리는 프로그램
- JVM은 JRE에 포함되어 있다.
- 자바 프로그램을 모든 플랫폼에서 제약 없이 동작시킬 수 있다. OS에 종속적이지 않음.
- 어떤 운영체제이든지 종속적이지 않고 사용 가능하다는 장점이 있지만 .java-.class-jvm까지 한 단계를 더 거치므로 속도가 느리다는 단점을 갖는다. 이러한 속도의 문제점을 보완하기 위한 JIT(Just-In-Time Compiler) 컴파일러를 사용. 같은 코드는 매번 해석하지 않고 실행할 때 컴파일하면서 해당코드를 캐싱하여 바뀐 부분만 컴파일하고 나머지는 캐싱된 코드를 사용한다.
바이너리 코드: 컴퓨터가 인식하고 이해할 수 있는 0과 1로 구성된 코드로 환경에 종속적이며 실행하지 못한다.
바이트 코드: 가상머신에서 사용되는 코드 개념으로 가상머신이 이해할 수 있는 중간 레벨로 컴파일한다. 어떠한 환경이든 종속적이지 않고 실행될 수 있다.
2. JVM의 동작 방식
자바 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당받는다. javac가 .java를 .class로 컴파일한다. ClassLoader는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 Runtime Data Area(실질적인 메모리를 할당 받아 관리하는 영역)에 올린다. 올려진 바이트 코드는 Execution Engine을 통해 해석된다. Execution Engine에 의해 Garbage Collector 작동과 Thread 동기화가 이루어진다.
3. JVM 구성
클래스 로더(Class Loader): JVM내로 클래스 파일을 동적으로 로드하고 링크를 통해 배치하는 작업을 수행하는 모듈.
실행 엔진(Execution Engine): 클래스 로더를 통해 런타임 영역에 배치된 바이트 코드를 명령어 단위로 읽어 실행.
- 인터프리터: 명령어를 하나씩 읽어 해석하고 바로 실행.
- JIT 컴파일러
- 가비지 컬렉터
런타임 데이터 영역(Runtime Data Area)
- 메소드 영역
- 힙 영역
- PC Register
- 스택 영역
- 네이티브 메소드
'JAVA' 카테고리의 다른 글
[멀티스레드와 동시성] - 1. 프로세스와 스레드 (0) | 2024.07.25 |
---|---|
자바 채팅 프로그램 (0) | 2024.05.29 |
다형성2 (0) | 2024.01.15 |
다형성1 (0) | 2024.01.07 |
JAVA | null과 "" | 개념 (2) | 2023.08.03 |