응용프로그램이 실행되면 JVM은 시스템으로부터 프로그램을 수행하는데 필요한
메모리를 할당받는다.
이 메모리를 용도에 따라 여러 영역으로 관리하는데 이 구조를 알아보자
JVM 과정을 알고 싶다면 -> 이 글을 클릭하시오
코드가 실행되고 클래스로더가 Run-time Data Area로 로딩시킨다
Run-time Data Area에서는 Heap과 Method Area는 전체 스레드가 공유하고
나머지는 스레드별로 생성되는 데이터 영역을 가지게 된다
아래 코드를 예시로 어떻게 저장되는지 확인하자
public class test {
int iv; // 인스턴스 변수
static int cv; // 클래스 변수
void method() {
int lv; // 지역 변수
}
}
new int[5];
또한 효율적인 GC를 위해 위와 같이 Heap영역을 나눴다
위와 같이 나눈 이유를 알고 싶다면 GC를 공부하자 여기서 다루지는 않겠다
아래의 영상을 보면 각 구성요소가 어떻게 저장되고 어떻게 관리되는지 볼 수 있다
Car c = new Car("아반떼");
위와 같은 코드가 있으면 new Car("아반떼") 객체가 Heap영역에 들어가고
인스턴스 c는 Stack 영역에 들어간다
https://hongsii.github.io/2018/12/20/jvm-memory-structure/
https://johngrib.github.io/wiki/jvm-stack/
https://www.youtube.com/watch?v=GU254H0N93Y
단순히 이론적으로 어딘가에 저장된다는 것은 알았지만 그 어딘가의 구조를 세세하게 알게되고 실제로 어느 코드를 적용하여 흐름도를 파악하니까 더욱 이해하기 좋았다
이 글이 흐름을 읽기엔 쉽지 않아 이해가 어렵다면 위의 유튜브 영상을 봐보면
훨씬 이해가 쉬울 것이다.