[자바 라이브 스터디] 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 실행해보기
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
•
◦
이를 OS에 특화된 거로 변환해 실행함
•
JVM에 엄청 많은 JVM 구현체들 있음.
◦
JVM 표준 정해져 있고 이를 구현하는 회사들 많음 : JVM 벤더(오라클, 아마존, Azul 등)
•
JVM : 스택 기반의 해석 머신
◦
JVM 인터프리터의 기본 로직 : 평가 스택 이용해 중간값들 담아두고 가장 마지막에 실행된 명령어와 독립적으로 프로그램 구성하는 옵코드를 하나씩 순서대로 처리하는 while 루프 안의 switch문
•
javap 옵션 : 역어셈블
•
실제로 유저가 작성한 클래스 실행되는데 진입점이 main 클래스가 됨
•
자바의 세가지 클래스 로더
◦
자바 버전에 따라 이름 많이 바뀜
▪
부트스트랩 클래스로더
▪
확장 클래스로더 (플랫폼 클래스로더)
▪
애플리케이션 클래스로더
•
부트스트랩 클래스로더가 자바 런타임 코어 클래스 로드함
◦
부트스트랩 클래스 로더의 주 임무는 다른 클래스로더가 나머지 시스템에 필요한 클래스를 로드할 수 있게 최소한의 필수클래스만 로드하는 것
•
바이트코드
◦
특정 컴퓨터 아키텍처에 특정하지 않은 중간 표현형
•
AOT 컴파일과 JIT 컴파일 비교
◦
AOT
▪
정의) 소스코드를 컴파일러에 넣고 실행 가능한 기계어로 뽑아내는 과정
▪
특징)
•
최적화할 기회가 한 번 뿐임
•
이해하기 쉬움
•
특정 프로세스만 이해 가능 (확장성 문제 있음)
▪
목표) 프로그램 실행할 플랫폼과 프로세서 아키텍처에 딱 맞는 실행 코드 얻는 것
◦
JIT
▪
정의) 런타임에 프로그램을 고도로 최적화한 기계어로 변환하는 기법
▪
특징)
•
새로 릴리즈할 때마다 새로운 프로세스 기능에 대한 최적화 코드 추가 가능
•
JDK과 JRE의 차이
◦
JRE : JVM + 라이브러리
◦
JDK : JRE + 개발툴