Search
📁

자바의 실행 과정과 JVM의 역할

자바의 실행 과정

간단한 흐름도
1.
소스 코드 작성
텍스트 편집기 등을 사용하여 자바 소스 코드를 작성.
이 코드는 .java 확장자.
2.
컴파일
작성한 자바 소스 코드를 컴파일러에 의해 기계어로 번역.
이때 생성된 기계어 코드는 바로 실행될 수 없고,
자바 가상 머신(JVM)에서 실행할 수 있는 바이트 코드인 .class 파일로 저장.
3.
로딩
JVM은 컴파일된 .class 파일을 메모리로 로딩. 이때 클래스 로더(Class Loader)가 사용.
로딩된 클래스는 메소드 영역(Method Area)에 저장.
4.
링크
로딩된 클래스 파일에 있는 정적(static) 변수와 메소드를 연결(링크). 이 과정은 두 단계로 나뉨.
검증(Verification): 바이트 코드의 유효성을 검사.
준비(Preparation): 클래스 변수(static 변수)와 기본값에 할당되는 메모리를 준비.
5.
초기화
클래스 변수(static 변수)들을 해당하는 값으로 초기화. 이때 초기화에 필요한 코드가 실행.
6.
메인 메소드 실행
JVM은 메인 메소드(public static void main(String[] args))를 찾아 실행.
7.
실행
메인 메소드를 시작으로 프로그램이 실행. 메소드 호출, 객체 생성, 변수 할당 등의 작업이 수행됨.
8.
종료
프로그램이 실행을 마치면 JVM은 사용한 메모리를 회수하고 프로그램을 종료.

JVM (Java Virtual Machine)이란 무엇인가

JVM은 자바 프로그램의 실행을 관리하고 지원하는 역할을 한다.

주요 기능

1. 바이트 코드 해석

JVM은 컴파일된 바이트 코드를 읽고 해석하여 해당 운영체제에서 실행 가능한 기계어로 변환한다.

2. 메모리 관리

JVM은 힙(heap)스택(stack) 메모리를 관리한다.
힙은 객체와 배열을 저장하는 곳이며, 스택은 메서드 호출과 지역 변수를 저장한다.

3. 가비지 컬렉션

JVM은 더 이상 사용되지 않는 객체를 자동으로 제거하는 가비지 컬렉션을 수행한다.
이는 메모리 누수를 방지하고 메모리 사용을 최적화하는 데 도움이 된다.

4. 실행 시간 예외 처리

JVM은 실행 중에 발생하는 예외를 적절하게 처리하여 프로그램의 안정성을 유지한다.

5. 스레드 관리

JVM은 다중 스레드 프로그램을 지원하고, 스레드 스케줄링 및 동기화를 관리한다.

6. 자원 관리

JVM은 파일 시스템, 네트워크 및 기타 시스템 리소스에 대한 액세스를 관리하고 보호한다.

7. JIT 컴파일

JVM은 Just-In-Time 컴파일러를 사용하여 바이트 코드를 기계어로 변환하고 실행한다.
이를 통해 반복되는 코드 블록은 실행 시간에 실제 기계 코드로 컴파일되어 성능을 향상시킨다.
자바의 실행 과정은 코드 작성부터 컴파일, 그리고 JVM에서의 실행까지 이어지며, JVM은 이러한 과정에서 자바 프로그램의 실행을 담당하는 핵심적인 역할을 한다.
자바의 특징인 플랫폼 독립성, 메모리 관리, 가비지 컬렉션, 다중 스레드 지원 등을 제공하여 안정적이고 효율적인 실행 환경을 제공한다.
따라서 자바 프로그램은 운영체제에 독립적으로 실행될 수 있으며, 이는 JVM이 이러한 환경을 제공하기 때문.