본문 바로가기
IT/Java

[자바] 메모리 영역 Static, Stack, Heap

by 성준하이 2023. 6. 28.
반응형
Static 영역  

Java 파일은 크게 필드(field), 생성자(constructor), 메서드(method)로 구성되어 있다.

Static 영역은 그 중 필드 부분에서 선언된 전역변수와 정적 맴버 변수(static 으로 선언되는 것)들의 데이터를 메모리에 상주시킨다.

상수 개념의 static과 의미를 묶어서 보면 도움이 된다.(아래 참고 포스팅 참고)

  • 정적 맴버 변수 = Static 변수와 Static 메서드가 합쳐진 것 (=클래스 멤버)
  • 객체에 소속된 맴버가 아닌 클래스에 고정된 맴버다.
  • 클래스 정보(맴버변수의 이름), static변수, 변수 정보(데이터타입, 접근제어자정보), 메서드 정보 등을 저장한다.
  • static (전역)변수는 어디서든 접근이 가능하기 때문에 가능한 무분별한 사용을 하지 않는 것이 좋다.
  • JVM이 동작해서 클래스가 로딩될 때 생성되고 프로그램 종료시까지 메모리에 상주하기에 무분별한 사용을 하지 않는것 이 좋다.

 

Stack 영역

스택 영역은 기본 자료형을 생성할 때 저장하는 공간으로, 임시적으로 사용되는 변수나 정보들이 저장되는 영역이다.

참조 자료형은 참조값만 저장한다. 이 참조값은 heap 영역에 존재하는 인스턴스(객체)를 가르킨다.

  • 메서드를 호출할 때마다 개별적으로 스택이 생성되며 종료시 영역에서 해제된다.
  • 컴파일 타임 시 할당 된다.

 

Heap 영역

참조형(Reference Type)의 데이터 타입을 갖는 객체, 배열 등은 Heap 영역에 저장된다.

new 키워드로 생성된 객체와 배열이 Heap 영역에 저장된다.

 

인스턴스의 실제 데이터는 Heap 영역에 올라간다. 저장된 메모리 위치가 다르기 때문에 static 메서드에서 외부 인스턴스 멤버에 접근할 수 없다.

 

  • Heap은 참조형의 데이터 객체에 실제 데이터들이 담기는 공간이고, 실제 데이터를 가지고 있는 Heap 영역의 참조값을 Stack 영역의 객체가 가지고 있는 것이다.
  • new를 통해 인스턴스 객체를 생성했을 때, heap 영역에는 생성된 객체가 올라가고, Stack 영역에는 해당 객체에 대한 주소 값(Reference)이 저장
  • 어떤 참조 변수도 Heap 영역에 있는 인스턴스를 참조하지 않게 된다면, GC(가비지 컬렉터) 의해 메모리에서 사라지게 된다.

 

메모리영역에서도 사용이 되지만

리스트로 사용되는 힙에 대해서는 아래 참고 포스팅 참고 바란다.


참고 포스팅

https://thenicesj.tistory.com/460

 

자바에서 상수

자바에서의 상수란 변수의 반댓말로 변하지 않고 고정된 값을 담는 변수를 의미한다. 변하지 않는 값을 사용하고 싶을 때 사용한다. 프로젝트를 진행 시 프로그램에서 변하지 않고 고정된 값인

thenicesj.tistory.com

https://thenicesj.tistory.com/314

 

스택(Stack), 큐(Queue), 힙(Heap) 에 대해서

자료구조 알고리즘을 하다보면 스택, 힙, 큐에 대해서 많이 얘기를 들어봤을텐데 오늘 포스팅에서는 하나씩 설명을 해보려고 한다. 스택 선형 자료구조 Last In First out(LIFO) 구조 스택 특징 같은

thenicesj.tistory.com

 

반응형

댓글