JVM의 구조와 Java의 실행방식 ,이에 따른 Java코드 실행 흐름, 자바에서 정적 동적의 의미

jaeyong Lee·2024년 6월 4일

소스코드가 OS에 해석되는 과정

1.소스코드에서 컴파일러가 컴파일해 바이너리 파일로만든다.(확장자 .class)
2.이 바이너리 파일을 JVM이 해석해 각 os에 호환가능하게 만들어 준다.

JVM 구조

Class Loader:JVM으로 들어오는 Java 클래스 파일을 로드한다.
Execution Engine: 로드된 바이트코드를 실제 기계어로 변환하고 실행하는 역할
Garbage Collector:더 이상 사용되지 않는 객체를 자동으로 메모리에서 해제하여 메모리 관리
JNI - Java Native Interface : Java 코드가 C, C++ 등의 네이티브 코드를 호출할 수 있도록 인터페이스를 제공

Runtime Data Area : Java 애플리케이션이 실행되는 동안 필요한 데이터와 구조를 저장하는 메모리 영역입니다. 이 영역은 여러 세부 영역으로 나뉩니다.
Method Area: 클래스 메타데이터, 상수, 정적 변수, 메소드 코드 등이 저장됩니다.
Heap: 객체와 배열이 저장되는 공간입니다.
Stack: 각 스레드마다 생성되며, 스레드 실행 시 메소드 호출 정보를 저장합니다.
PC Register: 각 스레드마다 생성되며, 현재 실행 중인 명령의 주소를 저장합니다.
Native Method Stack: 네이티브 메소드 호출 시 사용됩니다.

JAVA 실행 과정

정적요소 , 동적 요소

이건 메모리 여역 메소드, 힙, 스택 영역을 생각해보면 쉽다.
우선 main에서 실행될 때 정적인 요소들이 method area에 읽혀진다. 그 다음에 코드상 객체생성이나 메서드 호출이 있을 때 동적요소들이 생성된다.

즉 자바프로그램은 기본적으로 정적인 요소들로 시작하고, 프로그램 실행 중에 동적인 요소들이 발생한다.

0개의 댓글