이번 글에서는 JVM의 메모리영역과 컴파일 과정에 대해서 Deep Dive 해보겠습니다!

JVM의 메모리 영역은 크게 다음으로 이루어져 있습니다.

각 영역에 어떤 값들이 들어가는지 알아보기 전에 자바 변수의 종류에 대해서 알아볼까요?


자바의 변수

메모리 영역을 알아보다가 갑자기 자바의 변수를 배운다고 생각할 수 있습니다. 하지만 변수와 메모리 영역은 뗄수 없는 관계입니다.

어떤 변수냐에 따라 각기 다른 영역에 저장되기 때문이죠!

처음으로 알아볼 자바의 변수는 클래스 변수 입니다.

<aside> 💡

클래스 변수 (Static 변수)

쉽게 말하자면 static 키워드가 붙은 변수 입니다. 아래의 코드를 보면 바로 이해가 될겁니다.

class TestClass {
	static int num;
}

클래스 변수는 어떤 메모리 영역에 저장이 될까요?

바로 Method 영역에 저장되게 됩니다. (각 영역에 대한 설명은 더 아래에서 알아보고 지금은 변수들을 알아봅시다.)

그렇다면 클래스 변수는 생성시기가 어떻게 될까요?

바로 클래스가 메모리에 올라가는 순간 생성되게 됩니다.

그리고 중요한 특징이 있는데요.

여기서 다음과 같은 고민을 할 수 있습니다. ❓ 자바의 모든 변수를 클래스 변수로 선언하면 안되는걸까?

❗️ 매우 지양해야 하는 코딩 습관입니다. 모든 변수를 클래스 변수로 선언할 시 Method 영역이 클래스 변수만으로 꽉 차서 OutOfMemory 에러가 발생할 수 있습니다. 따라서 모든 객체가 공유해야 하는 값만 클래스 변수로 선언해야 합니다.

</aside>

이렇게 클래스 변수에 대해서 알아봤는데요. 다음으로 알아볼 변수는 인스턴스 변수 입니다.