전체 보기

[백기선 자바] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가

작성일자
2023/05/25
태그
SUB PAGE
프로젝트
백기선 자바
책 종류
1 more property

[자바 라이브 스터디] 1주차 - JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가

목표) 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.
1
issues

1. JVM이란 무엇인가

정의) Java Virtual Machine
자바 프로그램을 실행시켜주는 프로그램
특징)
WORA(Write Once, Run Anyware)
JVM이 자바 프로그램과 운영체제 사이에서 인터페이스 역할을 수행함
JVM을 통해 자바 프로그램을 OS나 장비에 구애받지 않고 사용 가능
Garbage Collection
프로그램에서 더 이상 사용되지 않는 부분을 찾아내 메모리에서 제거함으로써 메모리 관리를 하는 프로세스
자바 프로그램의 메모리 관리를 JVM이 도맡아 해줌.
이때 메모리 관리 프로세스에 Garbage Collection 프로세스가 쓰임

2. 컴파일 하는 방법

정의) 고급언어로 작성된 소스코드를 컴퓨터가 이해할 수 있도록 기계어로 변환하는 과정
.java 파일을 .class 파일로 변환하는 과정
방법) IDE 안 쓰고 직접 Java compiler 실행해보기
1.
JDK 설치해서 Java compiler 설치하기
Java compiler : bin 폴더 안에 javac
2.
자바 소스코드 작성 (.java 파일)
3.
터미널에서 작성한 자바 소스코드가 있는 디렉토리로 이동
4.
javac 소스코드파일이름 터미널에 입력 (예: javac HelloWorld.java)
.class 파일이 생성됨

3. 실행하는 방법

방법)
1.
터미널에서 작성한 자바 소스코드가 있는 디렉토리로 이동
2.
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 + 개발툴