본문 바로가기

Java SE Tutorials/JVM Memory

JVM Memory

Java 프로그래밍, JVM 메모리 구조와 클래스 로드 및 인스턴스 생성


JVM 메모리 구조

클래스의 로드는 프로그램 실행중 해당 클래스를 사용하는 코드가 실행될 때 단 한번만 일어나며 ClassLoader 라는 클래스에 의해 .class 파일이 Method Area 에 로드된다. 이 때부터 static 멤버( 클래스 멤버변수, 클래스 메소드)의 사용이 가능하고, 인스턴스 멤버는 사용할 수 없는데, 인스턴스 멤버를 사용하려면 Heap Memory에 인스턴스를 생성하고 참조를 이용하여 사용할 수가 있다

클래스가 로드된 후에 객체를 생성하면 Method Area 에 로드된 클래스 정보 중에서 인스턴스 변수가 Heap Memory에 생성되고 생성자에 의해 초기화된다.

인스턴스를 생성하더라도 Heap Memory 에 인스턴스 메소드는 로드되지 않고 Method Area에 있는 메소드를 사용하게 된다. 그러므로 한개의 클래스를 통해 생성된 많은 객체에서 Method Area에 있는 메소드를 호출하여 공유하게 되므로 메소드는 어떤 객체로부터 호출되었는지 판단할 수 있는 정보가 필요한데, 메소드가 컴파일될 때 인스턴스의 메소드의 첫번째 파라미터로 클래스의 참조가 전달되도록 파라미터 리스트가 재작성 되는 방법을 사용하고 있다