package mem;

public class Test1 {
	
	**static int num = 1; 
	int sum = 10;**
	
	public static void main(String[] args) {
		
	} 
}

둘은 엄연히 다른 메모리 공간에 위치.

그리고 얘를 컴파일(저장 시) 하면 .class 인 byte 코드로 바뀐다.

그리고 실행을 하면

1.컴파일 끝나고 JVM 실행

  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 종료
}
  1. main method 찾기

  2. 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 영역에 뜬다
	} 
}
  1. int sum = 10; 이 heap 에 뜬다.