728x90
반응형
지난 글에 이어서 오늘도 JVM에 대해서 글을 작성해보도록 하겠습니다.
지난번에는 JVM이 무엇인지와 그 안의 구조에 대해서 알아보았고, 또한 그 나누어진 구조에서 무엇을 진행할 수 있는지 알아보았습니다.
그렇다면 이제 밥을 먹기 위해 숟가락이랑 젓가락이 뭔지 파악한 것이니, 어떻게 하면 밥을 먹는지, 그 JVM의 실행 과정에 대해서 알아보겠습니다.
JVM 실행 과정?
- 로드(Loading):
- 클래스 로더가 클래스 파일을 읽어들이고, 해당 클래스의 바이너리 데이터를 메모리에 로드합니다.
- 로드된 클래스들은 Method Area에 배치됩니다.
- 검증(Verification):
- 클래스 파일의 유효성을 검사합니다. 예를 들어, 올바른 바이트 코드 구조와 메모리 접근 권한 등을 확인합니다.
- 준비(Preparation):
- 클래스가 필요로 하는 static 변수 공간을 할당하고 초기화합니다. 이 과정에서 변수들은 기본값으로 초기화됩니다.
- 할당(Resolution):
- 심볼릭 레퍼런스를 실제 메모리 레퍼런스로 변환합니다. 필요한 경우, 다른 클래스나 메소드들을 링크합니다.
- 초기화(Initialization):
- 클래스 변수(static 변수)들을 초기화하고, static 블록이나 static 메소드를 실행하여 객체 초기화를 수행합니다.
- 실행(Execution):
- main() 메소드를 찾고, Java Stack을 생성하여 main() 메소드를 호출합니다.
- 실행 엔진이 인터프리터를 통해 바이트 코드를 한 줄씩 실행하거나, JIT 컴파일러를 통해 네이티브 코드로 변환하여 실행합니다.
- 종료(Shutdown):
- 프로그램이 종료되면, 사용된 자원들을 정리하고 JVM을 종료합니다. 이 과정에서 Garbage Collector가 사용하지 않는 객체들을 메모리에서 해제합니다.
이와 같은 과정을 통해 JVM은 Java 프로그램을 효율적으로 실행하고 관리합니다. 각 구조와 단계는 Java의 크로스 플랫폼 특성과 안전성을 지원하는 데 중요한 역할을 하기도 합니다.
https://github.com/bottomsUp-99
bottomsUp-99 - Overview
Backend Developer. bottomsUp-99 has 10 repositories available. Follow their code on GitHub.
github.com
728x90
반응형
'Java Study' 카테고리의 다른 글
Maven 과 Gradle의 차이 (2) | 2024.06.17 |
---|---|
Java 연산자 (0) | 2024.06.17 |
JVM(Java Virtual Machine)의 구조 (0) | 2024.06.16 |
자바 타입 변환 (0) | 2024.06.16 |
Java 변수와 타입 (2) | 2024.06.16 |