package mem;
public class Test1 {
**static int num = 1;
int sum = 10;**
public static void main(String[] args) {
}
}
둘은 엄연히 다른 메모리 공간에 위치.
그리고 얘를 컴파일(저장 시) 하면 .class 인 byte 코드로 바뀐다.
그리고 실행을 하면
1.컴파일 끝나고 JVM 실행
→ static 키워드만 찾아서 로드 (: num, main)
package mem;
public class Test1 {
static int num = 1; // 전역변수
int sum = 10;
public static void main(String[] args) {
int minus = 20;
-> 얘는 떴을까? 아니
함수 내부(stack)는 함수가 호출될 때 메모리에 뜬다.
} // main 메서드 종료 -> JVM 종료
}
main method 찾기
main method 실행
→ main 메소드 실행되는 순간 main 메소드의 stack 영역이 뜸
(runtime 시 main 메소드의 stack 영역이 메모리에 로드)
-stack 영역에 minus 변수가 뜬다. (지역변수 - 메소드가 종료될때 사라짐)
int sum = 10; 는 어딨나요???
package mem;
public class Test1 {
static int num = 1;
int sum = 10;
public static void main(String[] args) {
int minus = 20;
Test1 t = new Test1();
// 객체를 만드는 순간 static 을 제외한 모든 애들이 heap 영역에 뜬다
}
}