- 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
[JAVA] JVM이란? 개념 및 구조 (JDK, JRE, JIT, 가비지 콜렉터...)
JVM이란 무엇인가 Java Virtual Machine의 줄임말. 직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다. Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되
doozi0316.tistory.com
[언어] 컴파일러(Compiler)와 인터프리터(Interpreter)
배경설명 코드를 작성하는 이유는 결국 그 코드를 실행했을 때 컴퓨터가 코드에 쓰인대로 행동하도록 하기 위해서겠죠! 하지만 컴퓨터의 뇌인 CPU는 사람이 사용하는 개발언어(C, C++, Java, Python
jhyonhyon.tistory.com
[Java] 자바의 동작과정 Java Compiler와 JVM
이클립스에서 *.java를 단축키 눌러서 실행시킬 줄만 알았지 *.java 파일이 어떠한 과정을 거쳐 실행이 되는지는 알지 못했습니다. 따라서 자바 컴파일러는 어떤 역할을 수행하며, 어디서 많이 들
kingofbackend.tistory.com
[JAVA] 자바 버전에 대하여 (java 8, 11, 17 버전 차이/17버전 사용이유)
나의 경우, 학원에서는 11버전을 쓰고 회사에서는 8 버전을 쓰고 궁금한 건 17버전이다 (?) 자바 버전은 왜이렇게 많으며, 어떤걸 써야 좋은지 모르겠어서 좀 찾아봤다. 자바 JDK LTS버전 https://www.jav
cheerup313.tistory.com
[Java] Java 버전 별 차이점📌
Java 종류 1. Java SE Java Standard Edition / J2SE 가장 많이 사용하는 표준 에디션 2. Jakarta (Java EE) Java Enterprise Edtion / J2EE 기업에서 사용하는 서버에 특화된 에디션 3. Java ME Java Micro Edition / J2ME 임베디드에
yummy0102.tistory.com
'Backend Study > 나Java봐라~' 카테고리의 다른 글
연산자 (0) | 2023.08.06 |
---|---|
자바 데이터 타입, 변수 그리고 배열 (0) | 2023.08.03 |
익명클래스 → 람다 ??? (0) | 2023.04.19 |
인텔리제이에서 shift + F10 을 누르면 생기는 일 (1) | 2023.04.13 |