이번 글에서는 JVM의 메모리영역과 컴파일 과정에 대해서 Deep Dive 해보겠습니다!
JVM의 메모리 영역은 크게 다음으로 이루어져 있습니다.
각 영역에 어떤 값들이 들어가는지 알아보기 전에 자바 변수의 종류에 대해서 알아볼까요?
메모리 영역을 알아보다가 갑자기 자바의 변수를 배운다고 생각할 수 있습니다. 하지만 변수와 메모리 영역은 뗄수 없는 관계입니다.
어떤 변수냐에 따라 각기 다른 영역에 저장되기 때문이죠!
처음으로 알아볼 자바의 변수는 클래스 변수 입니다.
<aside> 💡
쉽게 말하자면 static 키워드가 붙은 변수 입니다. 아래의 코드를 보면 바로 이해가 될겁니다.
class TestClass {
static int num;
}
클래스 변수는 어떤 메모리 영역에 저장이 될까요?
바로 Method 영역
에 저장되게 됩니다. (각 영역에 대한 설명은 더 아래에서 알아보고 지금은 변수들을 알아봅시다.)
그렇다면 클래스 변수는 생성시기가 어떻게 될까요?
바로 클래스가 메모리에 올라가는 순간 생성되게 됩니다.
그리고 중요한 특징이 있는데요.
여기서 다음과 같은 고민을 할 수 있습니다. ❓ 자바의 모든 변수를 클래스 변수로 선언하면 안되는걸까?
❗️ 매우 지양해야 하는 코딩 습관입니다. 모든 변수를 클래스 변수로 선언할 시 Method 영역이 클래스 변수만으로 꽉 차서 OutOfMemory 에러가 발생할 수 있습니다. 따라서 모든 객체가 공유해야 하는 값만 클래스 변수로 선언해야 합니다.
</aside>
이렇게 클래스 변수에 대해서 알아봤는데요. 다음으로 알아볼 변수는 인스턴스 변수 입니다.