목차
[자바 코드 작성 (.java 파일 생성)]
개발자가 코드를 작성하면 .java 파일이 생성된다.
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
컴파일
자바 컴파일러 (javac)에 의해 바이트 코드로 변환되고 결과물은 .class 확장자를 가진 파일에 저장된다.
이 파일은 사람이 읽을 수 없는 기계어와 비슷한 중간 코드이다.
아래 커맨드를 입력하면 .class 파일이 생성되고 바이트 코드의 결과물이 생성된다.
javac HelloWorld.java
[클래스 로딩]
OS별로 (윈도우, 리눅스, 맥) JRE (Java Runtime Environment)가 개발되어 있고, JRE 안에는 JVM과 각종 라이브러리가 존재한다. JRE만 있으면 자바 컴파일러에 의해 바이트 코드로 된 결과물을 어떤 환경에서든지 실행할 수 있어서 각 환경마다 컴파일러를 개발할 필요가 없게 된다. 그래서 자바는 다양한 플랫폼에서도 잘 실행될 수 있다.
어쨋든 JVM이 .class 파일을 메모리로 로드 하며 이 때 클래스 로더 (class loader)가 바이트 코드를 읽어 메모리에 로드하고 "런타임 데이터 영역 (Runtime Data Area)"에 클래스 정보를 저장한다. 이 때 모든 의존 클래스들도 로딩된다.
JVM의 클래스 로딩은 "동적 로딩(dynamic loading)"을 지원해서 프로그램이 실행 중일 때 필요한 클래스를 로딩한다고 한다.
[바이트 코드 실행]
JVM은 인터프리터 또는 JIT컴파일러를 통해 바이트 코드를 실제 기계어로 변환해서 실행한다.
- 인터프리터: 바이트 코드를 한 줄 씩 읽고 실행해서 느릴 수 있음
- JIT 컴파일러: 자주 사용되는 코드를 기계어러 미리 변환하여 더 빠르게 실행할 수 있음
[메모리 관리 및 GC]
자바에서 객체는 JVM의 힙 메모리 영역에 할당된다.
그리고 GC를 사용해 더 이상 참조되지 않는 객체를 자동으로 메모리에서 제거한다.
아래의 경우 cat1은 GC에 의해 메모리에서 제거된다.
Car car1 = new Car(); // 객체 car1 생성
Car car2 = new Car(); // 객체 car2 생성
car1 = null; // car1이 더 이상 참조되지 않음 (가비지)
[프로그램 종료]
JVM은 메모리를 해제하고 종료하며, JVM은 모든 자원을 메모리에 반납한다.
'Java' 카테고리의 다른 글
컬렉션 프레임워크 (2) | 2024.10.05 |
---|---|
원시 자료형 (Primitive Type) 과 참조 자료형 (Reference Type) (0) | 2024.10.03 |
함수형 인터페이스 (Functional Interface) 에 대해 (2) | 2024.10.03 |
제네릭 (Generic) 에 대해 (1) | 2024.10.03 |
Java의 주요 특징 (1) | 2024.10.03 |