일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- DB
- github
- JavaScript
- 프로시저
- OUT 파라미터
- 권한
- ERROR_MESSAGE
- cors
- 스프링부트
- springboot
- RAISERRR
- IT story
- C#
- SOP
- SSMS
- Exception in thread "main" java.lang.Error
- jpa
- ORM
- System.Text.Json
- git
- 스프링 시큐리티
- IT
- MSSQL
- SQL Server 구성 관리자
- .NET 8.0
- java
- 데이터베이스
- Newtonsoft.Json
- 자바
- SQL Server
- Today
- Total
its_jh_stroy
[Java] 자바가 실행되는 과정과 JVM, JRE, JDK 본문
자바 실행 과정
자바는 두 번의 컴파일을 거쳐 프로그램이 실행된다.
.java 확장자로 작성된 프로그램을 첫 번째 컴파일을 통해 .class 파일로 변환하고, JIT 컴파일이라 불리는 두 번째 컴파일을 거쳐 코드를 실행하는 것이다.
그러한 과정을 순서되로 나열하면 아래와 같이 동작한다.
1. 자바 코드 작성
개발자가 .java 확장자로 소스 코드를 작성한다.
2. 컴파일
자바 컴파일러(javac)에 의해 컴파일되어, 바이트 코드가 담긴 .class 파일이 생성된다.
3. 로드
JVM의 클래스 로더가 .class 파일을 찾아 메모리에 로드한다.
이 과정을 통해 JVM이 .class 파일의 바이트 코드를 읽어들일 수 있게 된다.
4. 링크
클래스 로더가 .class 파일 내용이 올바른지 검증하고 실행에 필요한 메모리를 준비한다.
바이트 코드가 JVM 위에서 안전하게 실행될 수 있도록 준비하는 과정이다.
5. 초기화
정적 변수 초기화 및 정적 블록 실행
6. JIT 컴파일(실행)
JVM이 .class 파일의 바이트 코드를 운영 체제가 이해할 수 있도록 변환하여 코드가 실행하는 과정이다.
자바가 JVM에서 동작한다고 하는 이유이다.
위 과정을 통해 작성된 자바 언어는 다양한 운영체제에서 실행될 수 있다.
자바의 Write Once, Run Anywhere 원칙을 준수하게 되는 것이다.
자바 구성 요소
JVM(Java Virtual Machine)
자바 가상 머신으로 불리는 JVM은 바이트 코드로 작성된 .class 파일을 기계어로 해석하여 자바를 실행시켜주는 역할을 담당한다.
자바가 여러 플랫폼에서 동작이 가능한 언어가 된 이유이다.
바이트 코드를 번역하는 것 외에도 메모리 관리와 가비지 컬렉션과 같은 일도 수행한다.
JVM 구성 요소
- 클래스 로더 : .class 파일과 바이트 코드를 메모리에 로드한다.
- JIT 컴파일러 : 바이트 코드를 기계어로 변환한다.
- 가비지 컬렉터 : 메모리 영역에서 사용하지 않는 데이터를 주기적으로 정리한다.
JRE(Java Runtime Enviroment)
자바 실행 환경으로 JVM을 포함하고 있다.
.class 파일과 JVM이 실행하는데 필요한 환경(라이브러리, 파일 등)을 제공하여 JVM이 JIT 컴파일을 수행할 수 있도록 한다.
JDK(Java Developement Kit)
자바 개발 키트는 javac 컴파일러, 디버거와 같은 개발에 필요한 도구를 제공하고, JRE와 JVM을 포함하고 있다.
만약 JRE만 있다면 이미 개발된 자바 프로그램 실행은 가능하지만, 새로운 프로그램을 개발하거나 컴파일하는 것은 불가능하다.
'Java' 카테고리의 다른 글
[Java] String, StringBuffer와 StringBuilder (0) | 2024.06.04 |
---|---|
[Java] 자바로 날짜와 시간 다루어보기 (0) | 2024.06.01 |
[Java] == 연산자와 equals() 메서드 (0) | 2024.05.25 |
[Spring Boot] 3-tier 아키텍처 (0) | 2024.05.02 |
[Springboot] vsCode에서 Springboot 프로젝트 만들어 실행하기 (0) | 2024.04.24 |