본문 바로가기
JAVA

[JAVA] static, stack, heap 영역

by meetyou 2023. 3. 19.

오늘은 JVM의 메모리 공간인 staic, stack, heap 영역에 대해 알아보겠습니다.

 

1. static 영역

- JVM이 동작해서 클래스가 로딩될 때 생성됩니다.

- 클래스 변수(static 변수), 생성자, 메소드 등을 저장하는 공간입니다.

- static 영역은 어느곳에서나 접근 가능하며, 데이터가 시작부터 종료가 될때까지 메모리에 남아있습니다.

 

2. stack 영역

- 메소드 내에서 정의하는 지역 변수, 매개변수 데이터 값이 저장되는 공간입니다.

- 메소드가 호출될때 스택 영역에 스택 프레임이 생기고 그안에 메소드를 호출합니다

- 메소드가 호출될때 메모리에 할당되고 종료되면 메모리에서 사라집니다

 

3. heap 영역

- 참조형 데이터 타입을 갖는 객체(인스턴스), 배열 등이 저장되는 공간

 * heap 영역을 가리키는 참조변수는 stack 적재

- 스택 영역과 다르게 메모리 호출이 끝나더라도 삭제되지 않는다.

 * 어떤 참조 변수도 heap 영역에 있는 인스턴스를 참조하지 않게 된다면, 가비지 컬렉터에 의해 사라진다.

 

4. 힙과 스택 메모리의 차이점

- 힙메모리는 어플리케이션 모든 부분에서 사용되지만, 스택 메모리는 하나의 스레드가 실행될 때 사용

- 객체가 생성되면 항상 힙 메모리에 저장되며, 스택 메모리는 힙 공간에 있는 객체를 참조만 한다.

- 스택 메모리는 생명 주기가 매우 짧지만, 힙 메모리는 애플리케이션의 시작부터 끝까지 살아남는다.

 

** 용어 정리 **

스택 프레임이란?

하나의 메서드에 필요한 메모리 덩어리를 묶어서 스택 프레임(Stack Frame)이라고 한다.

 

참조변수란? 

참조변수(Reference variable)는 객체를 가리키는 변수입니다. 자바에서 모든 객체는 힙(heap) 메모리에 생성되며, 참조변수는 이 힙 메모리 내의 객체를 가리킵니다. 참조변수는 객체가 저장된 메모리 주소를 가지고 있으며, 이를 이용하여 객체를 사용할 수 있습니다. 참조변수는 객체의 멤버 변수나 메소드에 접근할 수 있도록 하는 중간 매개체 역할을 합니다. 

참조변수는 객체의 복사본이 아니며, 단지 객체를 가리키는 포인터 역할을 합니다.

 

가비지 컬렉터란?

힙 영역에 참조되지 않고 남아버린 고아 객체들을 식별해 힙 영역을 청소해주는 역할을 합니다.

 

참고 

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD%EC%8A%A4%ED%83%9D-%ED%9E%99