프로그램을 실행하면 메모리에 올라가고 프로세스가 된다
(파일 -> 프로세스)
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번 영역 소멸
--------------------
'Programming Language > Java' 카테고리의 다른 글
자바for문 2의 승수 구하기, 구구단 (0) | 2020.03.23 |
---|---|
자바 value passing, reference passing (0) | 2020.03.23 |
자바 함수 쓰는 위치 (0) | 2020.03.20 |
자바 기초 - 숫자 연산, ++, 조건문, if문, 논리연산자 (0) | 2020.03.20 |
자바 프로그래밍 표기법 (0) | 2020.03.17 |