Java Virtual Machine, 자바 가상 머신의 약자를 따서 부르는 용어로 생성된 자바 프로그램을 읽어 실행하는 역할을 수행한다.
- 프로그램이 실행되면 JVM은 OS로 부터 메모리를 할당받는다
- 자바 컴파일러가 작성된 자바 소스코드(.java)를 읽어 바이트코드(.class)로 변환한다.
- 변환된 코드를 해석한다.
- 해석된 코드는 Runtime Data Area에 배치되어 실행된다
프로그램 수행을 위해 자바 프로그램 실행시 JVM이 OS로 부터 할당받는 메모리 공간으로 크게 5개의 공간으로 분류할 수 있다.
-스레드가 시작될 때 마다 생기는 공간
-스레드가 어떤 명령을 실행하게 될지에 대한 부분을 기록
-스레드가 시작될 때 마다 생기는 공간
-지역 변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값들이 저장되는 영역
-다른 프로그래밍 언어로 작성된 네이티브 코드를 위한 메모리 영역
-클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보같은 필드 정보와 메소드의 이름, 리턴 타입, 파라미터, 접근 제어자 정보같은 메소드 정보, Type정보(Interface인지 class인지), Constant Pool(상수 풀 : 문자 상수, 타입, 필드, 객체 참조가 저장됨), static 변수, final class 변수등이 생성되는 영역
-전체 스레드와 공유하는 공간
-문자열을 리터럴 형식으로 선언시 생성되는 String Pool 영역 존재
-실제 데이터를 가진 인스턴스와 배열 등이 저장
-Garbage Collector가 참조되지 않은 메모리를 확인하고 제거하는 영역
class Person {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
int id = 1;
String name = "whybe";
Person person = null;
person = buildPerson(id, name);
}
private static Person buildPerson(int id, String name) {
return new Person(id, name);
}
}