JVM

Lee Seung Jae·2022년 2월 21일
0

정리하는 겸 유튜브 백기선님 자바 스터디를 보며 다시 상기시키는 공부를 진행한다.

이미 정식 스터디는 끝났지만 늦게 시작하여 블로그에 따로 기록하려고 한다.

📢 1주차

  • JVM이란 무엇인가
  • 컴파일 하는 방법
  • 실행하는 방법
  • 바이트코드란 무엇인가
  • JIT 컴파일러란 무엇이며 어떻게 동작하는지
  • JVM 구성 요소
  • JDK와 JRE의 차이

📌 JVM이란?

JVM이란 Java Virtual Machine(자바 가상 머신) 의 줄임말

일반적인 프로그램은 OS위에서 실행되는데 자바 프로그램 같은 경우에는
OS위의 JVM에서 실행이 된다.

JVM위에서 실행 시키는 이유는 OS에 상관없이 실행시키기 위해서이다.

각기 다른 운영체제에서 실행시키는 이점은 정말 좋다.

📌 JVM의 역할

  • 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것이다.
  • JVM은 자바와 OS사이에서 중개자 역할을 수행하여 OS에 독립적인 플랫폼을 갖게 해준다.
    • OS의 메모리 영역에 직접 접근하지 않고 JVM을 통해 간접적으로 접근한다.
  • JVM은 프로그램 메모리 관리를 알아서 해준다. (GC 자동)

📌 자바 실행과정

  1. 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다. 이 메모리를 할당받고 용도에 맞게 여러 영역으로 나누어 관리한다.
  2. 자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어들여 자바 바이트코드(.class)로 변환시킨다.
  3. 클래스 로더를 통해 class파일들을 JVM으로 로딩한다.
  4. 로딩된 class 파일들은 Execution engine을 통해 해석된다.
  5. 해석된 바이트코드(.class)는 Runtime Data Areas에 배치되고 수행이 이뤄지게 되는데 여기서 가비지 컬렉터 같은 관리 작업도 수행한다.

image
{: .text-center}

📌 자바 바이트코드

자바 바이트코드(.class)란 JVM이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미한다.

자바 컴파일러(javac)에 의해 변환되는 코드의 명령어 크기가 1바이트라서 자바 바이트코드라고 불리고 있다.

📌 JIT 컴파일러란?

JIT(Just-In-Time) 컴파일러는 바이트코드를 CPU로 직접 보낼 수 있는 명령어로 바꾸는 프로그램이다.

일반적으로 컴파일러는 개발자와 최종 사용자를 위한 애플리케이션의 속도를 결정하는데 있어 핵심이다.

JIT 컴파일러는 성능 최적화를 위해 애플리케이션 런타임을 향상시킬 수 있다.

다른 컴파일러와는 다르게 JIT 컴파일러의 특성은 프로그램이 시작되고 코드를 컴파일 한 후에 JIT컴파일러가 실행된다.

📌 JVM 구성요소

  • 인터프리터
    • 바이트코드(.class)를 해당 하드웨어의 환경에 맞게 변환을 하여 운영체제에 종속적이지 않은 상태를 만들어줌.
  • 클래스 로더
    • 컴파일러가 SSD 내부에 만든 바이트코드 파일을 읽는다.
  • 실행엔진(JIT 컴파일러 포함)
    • 로더에 존재하는 클래스를 읽으면서 static이 붙은것을 판단한다.
    • static이 붙은 클래스가 없다면 그대로 종료
  • GC(Garbage Collector)
    • 더 이상 사용하지 않는 메모리를 자동으로 회수

📌 JRE, JDK 차이

JRE(Java Runtime Environment) : 컴파일된 자바 프로그램을 실행시킬 수 있는 자바 환경

  • JRE는 JVM이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있다.
  • JRE는 JVM의 실행환경을 구현했다고 할 수 있다.
  • 자바 프로그램을 실행 시키기 위해선 JRE를 반드시 설치해야 한다.
  • 자바 프로그래밍 을 하기 위해선 JDK가 필요하다.

JDK(Java Development Kit) : 자바 프로그래밍에 필요한 컴파일러 등등 포함

  • 개발을 위해 필요한 도구들을 포함한다.
  • JDK를 설치하면 JRE도 같이 설치가 된다.
  • JDK = JRE + @
profile
💻 많이 짜보고 많이 경험해보자 https://lsj8367.tistory.com/ 블로그 주소 옮김

0개의 댓글