Java Virtual Machine의 줄임말.
직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다.
Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되기 위해서 OS 위에서 Java 를 실행시키는 것이 바로 JVM이다.
즉, OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터이다.
응용프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
그 중 3가지 주요 영역에 대해 알아볼 것이다.
프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스 대이터를 메서드 영역에 저장한다. 이때, 그 클래스의 클래스변수도 이 영역에 함께 생성된다.
인스턴스가 생성되는 공간이다. 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다. 즉, 인스턴스변수들이 생성되는 공간이다.
호출스택은 메서드의 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면, 호출스택에 호출된 메서드를 위한 메모리가 할당되며, 이 메모리는 메서드가 작업을 수행하는 동안 지역변수(매개변수 포함)들과 연산의 중간결과 등을 저장하는데 사용된다. 그리고 메서드가 작업을 마치면 할당되었던 메모리공간은 비워진다.
호출스택의 과정을 확인해보자.
class CallStackTest {
public static void main(String[] args) {
firstMethod(); // static메서드는 객체 생성없이 호출가능하다.
}
static void firstMethod() {
secondMethod();
}
static void secondMethod() {
System.out.println(“secondMethod()”);
}
}
결과값
secondMethod()
위의 과정을 이미지로 확인해보자.