JVM(Java Virtual Machine), 자바를 실행하기위한 가상컴퓨터
단어로는 machine이라고 되어있지만 소프트웨어로 구현된 하드웨어, 즉 가상기계(virtual machine)
자바로 작성된 애플리케이션은 모두 JVM에서만 실행되기 때문에, 자바 애플리케이션에는 반드시 자바 JVM이 필요하다.
그림 1-2와 같이 일반 애플리케이션은 OS와 밀접해있기때문에 OS의 영향을 많이 받는다. 하지만 자바 애플리케이션은 JVM과만
상호작용하므로 OS 관계없이 어느 컴퓨터에서나 동작 가능하다.
1. 메소드 영역
프로그램 실행 중에 어떤 클래스가 사용되면, JVM은 해당 클래스 파일(*.class)을 읽고 그 클래스에 대한 정보를
메소드 영역에 저장한다. 이 때 그 클래스의 클래스 변수(class variable)도 여기에 생성된다.
2. 힙 영역
프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다. 즉 인스턴스 변수(instance variable)이 생성되는 공간이다.
3. 호출 스택
메소드의 작업에 필요한 메모리를 제공한다. 호출된 메소드에 필요한 메모리가 할당되며, 이 메모리는 지역변수와
중간 결과 등을 저장하는 데에 사용된다. 메소드가 작업을 마치면 할당되었던 메모리공간은 비워진다.
각 메소드의 메모리는 서로 구별되며, 호출 '스택'이라고 부르는 이유는 첫 번째로 호출된 메소드를 위한 메모리가 맨 밑에,
그 후 호출된 메소드를 위한 메모리가 그 위에 차곡차곡 마련되기 때문이다.
한 메소드(m1)가 작업 중일 때 다른 메소드(m2)가 호출 되었다면 m1은 수행을 멈추고 일단 m2를 먼저 수행한다.
m2가 수행될 동안 다른 메소드는 대기상태이며, m2가 작업을 마치면 메모리를 반환하고 호출스택에서 제거된다.
이후 다시 m1이 작업을 계속한다. 따라서 호출 스택의 top에 있는 메소드가 현재 작업 중인 메소드이다.
또한 아래에 있는 메소드가 바로 위에 있는 메소드의 caller 이다.
'JAVA' 카테고리의 다른 글
생성자(Constructor), this (0) | 2022.08.02 |
---|---|
스태틱 메소드와 인스턴스 메소드 (0) | 2022.08.02 |
메소드 - 기본형/참조형 매개변수 (0) | 2022.08.02 |
객체지향 프로그래밍 - 변수와 메소드 (0) | 2022.08.02 |
객체지향 프로그래밍 - 객체 배열 (0) | 2022.08.02 |
객체지향 프로그래밍 (0) | 2022.08.02 |