본문 바로가기
Backend Study/나Java봐라~

자바 소스파일(.java)을 JVM으로 실행하는 과정

by DaSsom 2023. 7. 30.

Java 실행과정 한눈에 보기!!

 

  • 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

 

 

 

 


doozi0316님 블로그

 

[JAVA] JVM이란? 개념 및 구조 (JDK, JRE, JIT, 가비지 콜렉터...)

JVM이란 무엇인가 Java Virtual Machine의 줄임말. 직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다. Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되

doozi0316.tistory.com

 

jhyonhyon님 블로그

 

[언어] 컴파일러(Compiler)와 인터프리터(Interpreter)

배경설명 코드를 작성하는 이유는 결국 그 코드를 실행했을 때 컴퓨터가 코드에 쓰인대로 행동하도록 하기 위해서겠죠! 하지만 컴퓨터의 뇌인 CPU는 사람이 사용하는 개발언어(C, C++, Java, Python

jhyonhyon.tistory.com

 

kingofbackend님 블로그

 

[Java] 자바의 동작과정 Java Compiler와 JVM

이클립스에서 *.java를 단축키 눌러서 실행시킬 줄만 알았지 *.java 파일이 어떠한 과정을 거쳐 실행이 되는지는 알지 못했습니다. 따라서 자바 컴파일러는 어떤 역할을 수행하며, 어디서 많이 들

kingofbackend.tistory.com

 

cheerup313님 블로그

 

[JAVA] 자바 버전에 대하여 (java 8, 11, 17 버전 차이/17버전 사용이유)

나의 경우, 학원에서는 11버전을 쓰고 회사에서는 8 버전을 쓰고 궁금한 건 17버전이다 (?) 자바 버전은 왜이렇게 많으며, 어떤걸 써야 좋은지 모르겠어서 좀 찾아봤다. 자바 JDK LTS버전 https://www.jav

cheerup313.tistory.com

 

yummy0102님 블로그

 

[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