본문 바로가기
백엔드 개발공부

TIL

by 름뱅2 2023. 8. 23.
반응형

자바의 동작 원리

 자바의 동작 원리

  1. 사람이 프로그래밍 언어(java)로 소스코드 파일(.java) 작성
  2. 소스코드는 자바 컴파일러(javac.exe)에 의해 바이트코드 파일(.class)로 변환
  3. 바이트 코드 파일은 자바 인터프리터(java.exe)에 의해 JVM(java virtual machine)에서 해당 운영체제에 맞게 기계어로 번역
    • 소스파일(.java) -> 바이트코드(.class) 변환은 컴파일 시점에서 자바 컴파일러(javac.exe)가 수행
    • 바이트코드 -> 기계어 변환은 런타임 환경, 즉 실행 과정에서 자바 인터프리터와 JIT 컴파일러가 수행

 

JRE & JDK

런타임 환경은 다른 소프트웨어를 실행하기 위해 고안된 소프트웨어.

프로그램을 실행하려면 클래스 파일들을 로드하고, 메모리와 각종 시스템 자원에 접근하는 등 여러 작업을 수행해야 하는데 그런 걸 하는 소프트웨어라고 보면 됨

 

- 자바 프로그램을 실행하고 싶다면 JRE를 설치해야함.

자바용 런타임 실행 환경인 JRE(Java Runtime Environment)에는 자바 클래스 라이브러리(Java class Library), 자바 클래스 로더(Java class Loader), JVM 등이 포함됨

 

- 자바 프로그램을 개발하고 싶다면 JDK(Java Development Kit)를 설치해야 함.

JDK는 자바 개발을 위해 필요한 툴을 모아 놓은 소프트웨어 패키지

 

JDK에는 JRE가 포함되어 있으므로 JDK를 설치했다면 JRE를 따로 설치할 필요는 없음

JVM의 구성

그림1

JVM은 네 가지로 구성되어 있음(그림 1 참조)

- 클래스 로더(Class Loader)

클래스 로더는 클래스를 메모리에 적재(load)하는 역할

중요한 것은 클래스는 컴파일 시점이 아닌 런타임 시점에서 동적으로 로드됨

즉, main() 메서드를 시작으로 프로그램이 실행되다가 처음 클래스를 만날 때 로드됨

 

- 실행 엔진(Execution Engine)

클래스 로더가 클래스를 로딩하는 작업을 마치면, JVM은 각 클래스에 있는 코드의 실행을 시작함

이 기능을 처리하는 것이 실행 엔진임

바이트 코드를 기계어로 해석하고 실행하는 부분이 여기에 해당됨

 

- 가비지 컬렉터(Garbage collector)

더 이상 참조되지 않는 객체 등을 메모리에서 제거해주는 역할

 

- 런타임 데이터 영역(Runtime Data Area)

그림2

JVM의 메모리 영역. 구조는 다음과 같음(그림 2 참조)

그림 1과 같이 Runtime Data Area는 PC Register, JVM Stack, Native Method Stack, Heap, Method Area로 5개의 영역으로 이루어짐

여기서 가장 중요한 JVM Stack, Heap, Method Area만 보기로 함

  • Method Area (메소드 영역) :

클래스 로더가 적재한 모든 클래스에 대한 정보들(클래스 변수 및 각종 메타 데이터)을 저장함

  • JVM Stack (or Call Stack):

메소드가 호출되면 여기에 매개변수, 지역변수, 메서드 호출 주소 등이 저장됨

메소드가 작업을 마치면 비워짐

메소드 작업에 필요한 메모리 공간을 제공함

  • Heap (힙):

프로그램이 실행되는 동안 생성되는 모든 인스턴스 정보가 여기에 동적으로 생성됨

 

 

 

 출처: https://wisdom-and-record.tistory.com/33

'백엔드 개발공부' 카테고리의 다른 글

TIL(OSI 7계층, TCP/IP 4계층)  (0) 2023.11.07
클라우드 컴퓨팅  (0) 2023.11.07