[자바 라이브 스터디] 1주차 - JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가
- 목표) 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.
1. JVM이란 무엇인가
- 정의) Java Virtual Machine
- 자바 프로그램을 실행시켜주는 프로그램
- 특징)
- WORA(Write Once, Run Anyware)
- JVM이 자바 프로그램과 운영체제 사이에서 인터페이스 역할을 수행함
- JVM을 통해 자바 프로그램을 OS나 장비에 구애받지 않고 사용 가능
- Garbage Collection
- 프로그램에서 더 이상 사용되지 않는 부분을 찾아내 메모리에서 제거함으로써 메모리 관리를 하는 프로세스
- 자바 프로그램의 메모리 관리를 JVM이 도맡아 해줌.
- 이때 메모리 관리 프로세스에 Garbage Collection 프로세스가 쓰임
2. 컴파일 하는 방법
- 정의) 고급언어로 작성된 소스코드를 컴퓨터가 이해할 수 있도록 기계어로 변환하는 과정
.java파일을.class파일로 변환하는 과정
- 방법) IDE 안 쓰고 직접 Java compiler 실행해보기
- JDK 설치해서 Java compiler 설치하기
- Java compiler : bin 폴더 안에
javac - 자바 소스코드 작성 (
.java파일) - 터미널에서 작성한 자바 소스코드가 있는 디렉토리로 이동
javac 소스코드파일이름터미널에 입력 (예:javac HelloWorld.java).class파일이 생성됨
3. 실행하는 방법
- 방법)
- 터미널에서 작성한 자바 소스코드가 있는 디렉토리로 이동
java 클래스이름터미널에 입력 (예:java HelloWorld)
- 참고
스터디에서 배운 내용
- Java 응용프로그램은 JVM하고만 통신함. JVM이 OS한테 전달해줌
- Java 어플리케이션은 OS에 종속적 X , JVM은 OS에 종속적 O
- javac HelloJava.java → HelloJava.class 생김
- 이를 OS에 특화된 거로 변환해 실행함
- JVM에 엄청 많은 JVM 구현체들 있음.
- JVM 표준 정해져 있고 이를 구현하는 회사들 많음 : JVM 벤더(오라클, 아마존, Azul 등)
- JVM : 스택 기반의 해석 머신
- JVM 인터프리터의 기본 로직 : 평가 스택 이용해 중간값들 담아두고 가장 마지막에 실행된 명령어와 독립적으로 프로그램 구성하는 옵코드를 하나씩 순서대로 처리하는 while 루프 안의 switch문
- javap 옵션 : 역어셈블
- 실제로 유저가 작성한 클래스 실행되는데 진입점이 main 클래스가 됨
- 자바의 세가지 클래스 로더
- 자바 버전에 따라 이름 많이 바뀜
- 부트스트랩 클래스로더
- 확장 클래스로더 (플랫폼 클래스로더)
- 애플리케이션 클래스로더
- 부트스트랩 클래스로더가 자바 런타임 코어 클래스 로드함
- 부트스트랩 클래스 로더의 주 임무는 다른 클래스로더가 나머지 시스템에 필요한 클래스를 로드할 수 있게 최소한의 필수클래스만 로드하는 것
- 바이트코드
- 특정 컴퓨터 아키텍처에 특정하지 않은 중간 표현형
- AOT 컴파일과 JIT 컴파일 비교
- AOT
- 정의) 소스코드를 컴파일러에 넣고 실행 가능한 기계어로 뽑아내는 과정
- 특징)
- 최적화할 기회가 한 번 뿐임
- 이해하기 쉬움
- 특정 프로세스만 이해 가능 (확장성 문제 있음)
- 목표) 프로그램 실행할 플랫폼과 프로세서 아키텍처에 딱 맞는 실행 코드 얻는 것
- JIT
- 정의) 런타임에 프로그램을 고도로 최적화한 기계어로 변환하는 기법
- 특징)
- 새로 릴리즈할 때마다 새로운 프로세스 기능에 대한 최적화 코드 추가 가능
- JDK과 JRE의 차이
- JRE : JVM + 라이브러리
- JDK : JRE + 개발툴

![[백기선 자바] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F301eb74c-edaf-492f-9dca-9be8a3bbf75e%2F%25EC%25BA%25A1%25EC%25B2%2598.jpg?table=block&id=99650224-4ae7-4758-9be9-58aa404e443a&cache=v2)
![[자바 뉴스 라이브] 2020/11/14, 자바 스터디 1주차](https://www.notion.so/image/https%3A%2F%2Fi.ytimg.com%2Fvi%2FT7NyR5UvyYo%2Fmaxresdefault.jpg?table=block&id=79ba443a-91f7-4f9e-b094-5ae8d2705657&cache=v2)
![[Backend] JVM warm up / if(kakao)dev2022](https://www.notion.so/image/https%3A%2F%2Fi.ytimg.com%2Fvi%2Futjn-cDSiog%2Fmaxresdefault.jpg?table=block&id=24a102be-b2b6-41c2-96d6-3eee651996ee&cache=v2)