- JVM이란 무엇인가
- Java Virtual Machine / 자바를 실행하기 위한 기계
- OS에 종속적이지 않은 Java를 CPU가 인식, 실행할 수 있도록 도와줌
- 바이트코드란 무엇인가
- 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진 표현법
- 자바 바이트 코드 ? JVM이 이해할 수 있는 언어로 변환된 자바의 소스코드
- JIT 컴파일러란 무엇이며 어떻게 동작하는지
- 프로그램을 실제 실행하는 시점에 기계어로 동적 번역(or JIT 컴파일) 하는 컴파일러
- 인터프리터 방식의 단점을 보완하기 위해 도입
*** 컴파일 ? 무언가 모아서 묶음으로 만드는 행위 / 프로그램 전체를 스캔하여 모두 기계어로 한번에 번역함
프로그램 전체를 스캔하기 때문에 초기 스캔 시간 오래걸림 + 메모리를 많이 사용함
그렇지만, 한 번 스캔하고나면 파일을 계속 사용하므로 실행 속도 빠름 + 실행 전에 오류 발견 쉬움
*** 인터프리터 ? 프로그램 실행 시 한 번에 한 문장씩만 기계어로 번역함
한 줄, 한 줄 해석 -> 실행 속도 느림 + 실행해야만 오류 발견 가능함
그렇지만, 메모리 효율이 좋음 + 빌드 없이 바로 실행 가능하여 속도 빠름
- JVM 구성 요소
- 클래스 로더 : JVM 내로 클래스 파일을 로드하고 링크를 통해 배치 작업 수행
- 실행 엔진(인터프리터, JIT 컴파일러, 가비지 컬렉터) : 클래스를 실행 시킴
* 인터프리터 : 바이트코드를 명령어 단위로 읽어서 실행
* JIT 컴파일러 : 인터프리터 방식으로 실행하다가 적절한 시점에 전체 파일을 컴파일, 이후 기계어로 실행
* 가비지 컬렉터 : 더 이상 사용하지 않는 메모리 해제
- 런타임 데이터 영역
* PC register : 스레드가 시작될 때 스레드마다 하나씩 생성, 현재 수행 중인 JVM 명령 주소값 가지고 있음
* JVM stack : 프로그램 실행 중 변수, 임시 데이터, 스레드나 메소드의 정보를 저장
* Native Method stack : 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행시키는 영역
* Method Area ( = static, class area) : 클래스를 처음 메모리 공간에 올릴 때 초기화되는 대상을 저장하기 위한 메모리 공간 (멤버 변수, 메소드, 타입 저장)
* Runtime Contans Pool : static 영역의 별도 공간, 상수 자료형을 저장하는 공간
* Heap Area : 객체를 저장하는 공간, new 연산자로 생성되는 객체와 배열을 저장
- JDK와 JRE의 차이
- JDK : Java Development Kit, Java를 사용하기 위해 필요한 모든 기능을 가진 Java용 SDK (Software Development KIt), 프로그램을 생성, 실행, 컴파일 할 수 있는 도구
- JRE : Java Runtime Environment, JVM + 자바 클래스 라이브러리 등으로 구성
- 자바 버전별 차이
*** LTS ? Long Term Support, 오랜 기간 지원하는 특별 버전 에디션 → 그래서 8, 11, 17을 많이 사용
JAVA 8
- 오라클 인수 후 첫 LTS 버전
- 함수형 프로그래밍 (람다식 / Stream API) 제공
JAVA 11
- String / File API 제공
- var를 람다 표현식의 매개변수로 사용되도록 확장
- HttpClient 지원
JAVA 17
- Spring Boot 3.0 부터는 자바 17 이상 사용 가능
- 향상된(?) switch 문 사용
- Sealed Classes
- 난수 생성 API 제공
- Foreign Function & Memory API 제공
- Security Manager는 더이상 사용 X
'Backend Study > 나Java봐라~' 카테고리의 다른 글
연산자 (0) | 2023.08.06 |
---|---|
자바 데이터 타입, 변수 그리고 배열 (0) | 2023.08.03 |
익명클래스 → 람다 ??? (0) | 2023.04.19 |
인텔리제이에서 shift + F10 을 누르면 생기는 일 (1) | 2023.04.13 |