오늘은 JVM의 메모리 공간인 staic, stack, heap 영역에 대해 알아보겠습니다.
1. static 영역
- JVM이 동작해서 클래스가 로딩될 때 생성됩니다.
- 클래스 변수(static 변수), 생성자, 메소드 등을 저장하는 공간입니다.
- static 영역은 어느곳에서나 접근 가능하며, 데이터가 시작부터 종료가 될때까지 메모리에 남아있습니다.
2. stack 영역
- 메소드 내에서 정의하는 지역 변수, 매개변수 데이터 값이 저장되는 공간입니다.
- 메소드가 호출될때 스택 영역에 스택 프레임이 생기고 그안에 메소드를 호출합니다
- 메소드가 호출될때 메모리에 할당되고 종료되면 메모리에서 사라집니다
3. heap 영역
- 참조형 데이터 타입을 갖는 객체(인스턴스), 배열 등이 저장되는 공간
* heap 영역을 가리키는 참조변수는 stack 적재
- 스택 영역과 다르게 메모리 호출이 끝나더라도 삭제되지 않는다.
* 어떤 참조 변수도 heap 영역에 있는 인스턴스를 참조하지 않게 된다면, 가비지 컬렉터에 의해 사라진다.
4. 힙과 스택 메모리의 차이점
- 힙메모리는 어플리케이션 모든 부분에서 사용되지만, 스택 메모리는 하나의 스레드가 실행될 때 사용
- 객체가 생성되면 항상 힙 메모리에 저장되며, 스택 메모리는 힙 공간에 있는 객체를 참조만 한다.
- 스택 메모리는 생명 주기가 매우 짧지만, 힙 메모리는 애플리케이션의 시작부터 끝까지 살아남는다.
** 용어 정리 **
스택 프레임이란?
하나의 메서드에 필요한 메모리 덩어리를 묶어서 스택 프레임(Stack Frame)이라고 한다.
참조변수란?
참조변수(Reference variable)는 객체를 가리키는 변수입니다. 자바에서 모든 객체는 힙(heap) 메모리에 생성되며, 참조변수는 이 힙 메모리 내의 객체를 가리킵니다. 참조변수는 객체가 저장된 메모리 주소를 가지고 있으며, 이를 이용하여 객체를 사용할 수 있습니다. 참조변수는 객체의 멤버 변수나 메소드에 접근할 수 있도록 하는 중간 매개체 역할을 합니다.
참조변수는 객체의 복사본이 아니며, 단지 객체를 가리키는 포인터 역할을 합니다.
가비지 컬렉터란?
힙 영역에 참조되지 않고 남아버린 고아 객체들을 식별해 힙 영역을 청소해주는 역할을 합니다.
참고
'JAVA' 카테고리의 다른 글
[JAVA] chromedriver 실행 에러 해결 (0) | 2023.05.18 |
---|---|
[JAVA] 간단한 크롤링 구현 (0) | 2023.05.17 |
[JAVA] final 클래스, 메소드, 변수 적용 (0) | 2023.03.15 |
[JAVA]추상 클래스와 인터페이스 차이점 (0) | 2023.03.12 |
[Java] Redis Hash, List 사용하기 (0) | 2023.02.26 |