keyword
JDK | JRE | JVM
Class Loading | static initialize | Runtime Data Area
Method Area(Static Area) | Stack | Heap
실행 엔진 | GC
체크리스트
✔ Java 코드가 실행되는 과정을 설명할 수 있는가?
✔ JVM 구조를 정리 할 수 있는가?
✔ 코드와 메모리를 연관지어 설명할 수 있는가?
코드 실행되는 과정
.java --[Compiler]--> .class --[Run]--> JVM --> os --> Hardware (Computer)
JDK > JRE > JVM & Library
- JDK 안에 JRE 있고, JRE 안에 JVM과 Library 있음
Loading
Linking
참고자료
Initialization
class Practice {
public static String STATIC_MESSAGE = "응애";
static {
System.out.println("I'm Loading");
System.out.println(STATIC_MESSAGE + "2");
}
public static String GET_STATIC_MESSAGE(){
return STATIC_MESSAGE;
}
}
public class Main {
public static void main(String[] args) {
String staticMessage = Practice.GET_STATIC_MESSAGE();
System.out.println("Hello");
System.out.println(staticMessage);
}
}
main(String[] args)
- java 프로그램 실행하기 위한 진입점
- 프로그램에 이미 세팅되어 있음
- 즉 조작이 가능
- JRE는 psvm 메서드가 있는지 먼저 찾는다
- psvm 존재 == true -> JRE는 JVM 부팅
- 부팅된 JVM은 바이트파일(.class) 실행
- JVM 전처리 java.lang 패키지 로드 : Static 영역에 올림
-> sout 같은 메서드 쓸 수 있게 되는 것
- 작성한 class와 import package Static 영역에 올림
- Stack영역에 main() 스택 프레임 올라감
기본메서드 psvm 더 알아보기