public class Mouse {
public String name;
public int age;
public int countOfTail;
public void sing() {
System.out.println(name + " 찍찍!!!");
}
}
public class MouseDriver {
public static void main(String[] args) {
Mouse mickey = new Mouse();
mickey.name = "미키";
mickey.age = 85;
mickey.countOfTail = 1;
mickey.sing();
mickey = null;
Mouse jerry = new Mouse();
jerry.name = "제리";
jerry.age = 73;
jerry.countOfTail = 1;
jerry.sing();
}
}
JRE의 동작:
main()
메서드가 있는지 확인한다.
main()
메서드를 발견한다.main()
메서드의 존재가 확인되면 JVM에 전원을 넣어 부팅한다.JVM의 동작 :
JRE에게 목적 파일을 전달받아 실행한다.
전처리를 한다.
목적 파일 내에 있는 모든 Class와 import package를 스태틱 영역에 배치한다.
Mouse mickey = new Mouse();
를 실행한다.
Mouse mickey
⇒ Mouse 객체에 대한 참조 변수 mickey를 만든다.
new Mouse()
⇒ Mouse 클래스의 인스턴스를 하나 만들어 힙에 배치한다.
=
⇒ Mouse 객체에 대한 주소(포인터)를 참조 변수 mickey에 할당한다.
mickey.name = "미키";
mickey.age = 85;
mickey.countOfTail = 1;
를 차례대로 실행한다.
mickey.sing();
을 실행한다.
"미키 찍찍!!!"
을 출력한다.mickey = null;
을 실행한다.
:Mouse
)를 더이상 참조하지 않는다.가비지 컬렉터가 아무도 참조해 주지 않는 객체(:Mouse
)를 쓰레기로 인지하고 수거한다.
Mouse jerry = new Mouse();
를 실행한다.
jerry.name = "제리";
jerry.age = 73;
jerry.countOfTail = 1;
를 차례대로 실행한다.
jerry.sing();
을 실행한다.
"제리 찍찍!!!"
을 출력한다.main()
메서드의 닫는 중괄호 }
를 만나서 main()
스택 프레임을 소멸 시킨다.
JRE는 JVM을 종료하고 JRE 자체도 운영체제 상의 메모리에서 사라진다.