[JAVA] 컴파일 과정
2024. 2. 26. 09:59ㆍWeb/JAVA
1. 전체 실행 과정
2. JVM
- 타겟 플랫폼에 맞춰서 컴파일 해야한다는 단점을 보완하기 위해 나온 플랫폼
- Java의 바이트 코드는 JVM이라는 가상머신 위에서 돌아감으로써 문제를 해결
- JVM이 설치된 플랫폼이면 어디든 똑같이 바이트코드가 동작
3. 바이트코드 변환
- 개발자가 .java 파일을 생성하고 Build를 하게되면 자바 컴파일러의 javac라는 명령어를 사용하여 자바 바이트코드로 구성된 .class파일을 생성하게 됩니다.
- 바이트코드는 JVM과 같은 가상머신이 이해할수있는 언어이고, 바이너리 코드는 CPU가 이해할 수 있는 언어이다.
4. 클래스 로더와 실행 엔진
- Bootstrap Class Loader : 가장 기본적인 자바 API를 로드하는 클래스로더
- Extension Class Loader : 기본 자바 API를 제외한 나머지 확장 클래스 로더
- System Class Loader : 애플리케이션의 클래스 로드
- User-Defined Class Loader : 사용자가 직접 생성하여 사용하는 클래스 로더
- 추출해낸 .class파일은 클래스 로더에 의해서 JVM의 영역으로 들어가게 됩니다.
- 로딩과정에서 메서드 영역에 클래스를 저장하고, 링크과정에서 구성 요소를 검증하고 메모리를 할당 한 후,
초기화 과정에서 클래스 변수들을 적절한 값으로 초기화합니다. - 인터프리트 방식 : JVM의 기본적인 방식 -> 바이트코드를 한줄씩 읽는다
- JIT 컴파일러 방식 : 내부적으로 특정 메서드가 얼마나 자주 수행하는지 체크하고 후에 캐싱하는 방식
5. 런타임 데이터 영역
- 클래스 로더의 로딩과정을 통해 불러온 클래스들은 메서드영역에 저장
- 메서드영역에는 클래스와, 인터페이스에 대한 필드 및 메서드정보, Static변수, 메서드의 바이트 코드 등등이 저장
- 인스턴스나 객체는 힙영역에 저장
'Web > JAVA' 카테고리의 다른 글
[JAVA] 멀티스레드 환경에서 문제와 대책 (0) | 2024.02.26 |
---|---|
[JAVA] equals(), hashCode() (1) | 2024.02.26 |
[JAVA] String / StringBuffer / StringBuilder (0) | 2024.02.23 |
[JAVA] Immutable(불변) / Mutable(가변) (0) | 2024.02.23 |
[JAVA] 래퍼 클래스 (Wrapper Class) (0) | 2024.02.23 |