Java는 JVM(Java Virtual Memory)위에서 동작한다. 이 덕분에 하나의 자바 코드로 여러 운영체제에서 동일하게 동작시킬 수 있다(쓰레드 개념에서 일부 제외)
JVM은 시스템으로부터 프로그램을 실행하기 위한 메모리를 할당받고 이를 여러 영역으로 나누어 관리한다. 주요 3가지 영역은 아래와 같다
클래스의 클래스 파일을 읽어들인 후 클래스에 대한 정보를 메소드 영역에 저장
한다. 클래스의 클래스 변수 또한 이곳에 저장
된다.예를 들어 아래와 같은 코드가 있다고 가정하자
class example{
public static void main(String[] args){
test1 t = new test1();
t.method1();
}
}
class test1{
private static final int number = 10;
private int iv = 20;
public void method1(){
this.method2();
}
protected void method2(){
System.out.println(test1.number);
}
그러면 각 영역은 아래와 같은 상태를 가진다. (Call Stack은 실행 흐름에 따라 하니씩 pop 된다)