어떻게 동작할까
public class Main {
public static void main(String[] args) {
System.out.println("haha")
}
}
우리는 Main.java 파일을 만든다. 그럼 class Main이라는 명칭이 주어지는데 compiler는 이 class라는 키워드를 기반으로 Main이라는 class를 만든다.
class loder가 메모리 영역으로 실어 나른다.
main method
jvm의 약속 중 모든 자바 프로젝트는 제일 먼저 클래스의 main 메소드를 실행시킨다.
클래스 로더가 Main.java 파일을 메모리로 로드한 후, 바이트코드는 JVM(Java Virtual Machine) 메모리 영역에 다음과 같이 적재된다
메서드 영역(Method Area) 클래스 정보(클래스 이름, 상위 클래스, 구현한 인터페이스 등) 필드 정보(인스턴스 변수, 클래스 변수 등) 메서드 정보(메서드 이름, 매개변수, 리턴 타입 등) 상수 풀(문자열 리터럴, 숫자 리터럴 등)
스택 영역(Stack Area) 메서드 호출 시 프레임이 생성되고, 이 프레임에는 로컬 변수와 메서드 호출 정보가 저장된다. main 메서드가 호출되면 main 메서드의 프레임이 스택에 푸시한다.
힙 영역(Heap Area) 객체와 배열이 생성되는 영역이다. System.out.println("haha") 문장에서 "haha" 문자열 객체가 힙 영역에 생성된다.
JVM 메모리 구조
바이트코드 실행 순서
Main 클래스 로드
main 메서드 호출 및 프레임 푸시
"haha" 문자열 객체 생성
println 메서드 호출 및 프레임 푸시
"haha" 문자열 출력
println 메서드 프레임 팝
main 메서드 프레임 팝 및 프로그램 종료
Last updated