728x90
더 자바
JVM (Java Virtual Machine)
- 자바 가상 머신으로 .class 파일을 os에 특화된 코드로 변환하여 실행한다.
- 바이트 코드를 실행하는 표준이자 (JVM 자체는 표준) 이자 구현체다.
- jvm 밴더: 오라클, 아마존,…..
- 특정 플랫폼에 종속적이다.
JRE (Java Runtime Environment): JVM + 라이브러리
- 자바 애플리케이션을 실행할 수 있도록 구성된 배포판.
- JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일
JDK (Java Development Kit): JRE + 개발툴
- JRE + 개발에 필요할 툴
- 오라클은 자바 11부터 JDK만 제공하며 JRE 따로 제공 x
자바는
- 오라클에서 만든
- Oracle JDK 11 버전부터
- 상용으로 사용할 때
위 3가지 조건을 모두 만족할 때 유료이다. (하나라도 만족하지 못 할 시 무료다)
JVM 언어
- JVM 기반으로 동작하는 프로그래밍언어
- ex) 클로저, Kotlin, Scala …
JVM 구조
클래스 로더 시스템
- .class에서 바이트코드를 읽고 메모리에 저장
- 로딩: 클래스 읽어오는 과정
- 링크: 레퍼런스를 연결하는 과정
- 초기화: static 값들 초기화 및 변수에 할당
메모리
- 메서드 영역에는 클래스 수준에 정보 (클래스 이름, 부모 클래스 이름, 메소드, 변수) 저장 공유 자원이다.
- 힙 영역에는 객체를 저장. 공유 자원이다.
- 스택 영역
- 쓰레드마다 런타임 스택을 만들고 그 안에 메소드 호출을 스택 프레임이라 부르는 블럭으로 쌓는다. 쓰레드 종료하면 런타임 스택도 사라진다.
- PC(Program Counter) 레지스터: 쓰레드마다 쓰레드 내 현재 실행할 스택 프레임을 가리키는 포인터가 생성
실행엔진
- 인터프리터: 바이크 코드를 한 줄씩 실행.
- JIT 컴파일러: 인터프리터 효율을 높이기 위해 반복되는 코드를 발견하면 JIT 컴파일러로 모두 네이티브 코드로 컴파일된 코드를 바로 사용한다.
- GC(Garbage Collector): 더 이상 참조되지 않는 객체를 모아서 정리한다.
JNI(Java Native Intergace)
- 자바 application 에서 c, c++로 작성된함수를 사용할 수 있는 방법 제공
네이티브 메소드 라이브러리
- c, c++로 작성된 라이브러리
참조: 백기선 더 자바
'Java' 카테고리의 다른 글
[이펙티브자바] 아이템7. 다 쓴 객체 참조를 해제하라. (0) | 2023.05.10 |
---|---|
[이펙티브자바] 아이템 6. 불필요한 객체 생성을 피하라 (0) | 2023.05.09 |
[이펙티브자바] 완벽공략 18. 가비지 컬렉션 (0) | 2023.05.09 |
[이펙티브자바] 아이템4. 인스턴스화를 막으려거든 private 생성자를 사용하라 (0) | 2023.04.21 |