프로그램을 실행하면 메모리에 올라가고 프로세스가 된다
(파일 -> 프로세스)

cpu는 메모리에 올라온 것만 읽을 수 있다

------------------------


JVM이 실행되면

1. 클래스를 메모리에 로딩

2. static 을 메모리(static영역)에 올림

3. main(함수) 을 실행

----------------------


static은 프로그램을 실행할때 메모리(static영역)에 로딩되고 프로그램을 종료하면 없어진다.

stack은 함수를 실행할때 메모리(stack영역)에 로딩되고 함수를 종료하면 없어진다.

heap은 static이 아닌 것들을 부를 때 메모리(heap영역)에 로딩되고, 직접 종료 시키면 없어진다. 
(JVM에서는 필요없는 구간부터 알아서 없애줌)

 

예제 코드

package ch03;

class 자판기 {

	static String cola = "코카콜라";
	static String water = "물";

	static String 작동(int money) {
		System.out.println("자판기가 작동합니다.");
		System.out.println(money + "원을 받았습니다.");
		return cola;
	}
}

class MemoryExample {

	
	int money = 500;

	int 용돈받기(String msg) {
		System.out.println(msg);
		System.out.println("용돈을 받았습니다.");
		return money;
	}

	public static void main(String[] args) {
		MemoryExample me = new MemoryExample();
		int money = me.용돈받기("아빠 만수무강하세요.");
		String output = 자판기.작동(money);
		System.out.println(output + "을 받았습니다. 잘 마실께요!!");
	}
}

 

 

작동순서

 

----------------- 
(1) 자판기 (static) 
----------------- 
cola = "코카콜라"; 
water = "물";  
작동() 


--------------------------- 
(2) MemoryExample (static) 
--------------------------- 
main() 


-------------------- 
(3) main (stack영역) 
-------------------- 
me 
money = me.용돈받기() 
output = 자판기.작동() 


-------------------- 
(4) me (heap영역) 
-------------------- 
money = 500 
용돈받기() 


-------------------- 
(5) me.용돈받기 (stack영역) 
-------------------- 
msg = "아빠 만수무강하세요."


-------------------- 
(6) 5번영역 소멸 
-------------------- 


-------------------- 
(7) 자판기.작동(stack영역) 
-------------------- 
money = 500



-------------------- 
(8) 7번 영역 소멸 
-------------------- 



-------------------- 
(9) 4번 영역 소멸 
-------------------- 



-------------------- 
(10) 3번 영역 소멸 
-------------------- 



-------------------- 
(11) 1, 2번 영역 소멸 
--------------------

+ Recent posts