Heap Stack 차이점

윤현우·2024년 1월 4일
0

Heap

  • 자바의 힙 공간은 객체와 JRE 클래스들에게 메모리를 할당할 때 사용 된다.
  • 객체가 생성되면 힙 공간에 할당되며, 이 객체에 대한 참조가 스택 메모리에 저장된다.
  • 가비지컬렉션은 힙 메모리에 더이상 참조하지 않는 객체들을 정리 한다.
  • 힙에 만들어진 객체는 어디서든 접근할 수 있고, 어플리케이션 어디에서나 참조될 수 있다.

Heap 특징

  • 힙 영역이 가득차면 OutOfMemoryError가 발생
  • 스택 영역에 비해 엑세스 속도가 조금 느리다.
  • 스택 영역과 달리 메모리 해제가 자동으로 되지 않는다.
  • 메모리 사용의 효율성을 위해 GC가 필요하다.(Garbage Collection)
  • Thread-safe하지 않기 때문에 적절히 synchronizing을 해야한다.

Stack

  • 정적 메모리 할당 및 쓰레드 실행을 위해 사용되는 영역
  • 메소드에 고유한 기본 값과 메소드에서 참조하는 힘 개체에 대한 참조값을 포함하고 있다.
  • LIFO(Last-In-First-Out) 순서로 동작된다.
  • 새 메소드가 호출될 때마다 스택 상단에 해당 메소드에 대한 새블록이 생성된다.
  • 메소드 실행이 완료되면 해당 스택에서 pop되고, 호출한 메소드로 흐름이 돌아가게 된다.

Stack 특징

  • 스택 내부의 변수는 변수를 생성한 메소드가 실행되는 동안만 존대한다.
  • 메소드 실행에 따라 자동으로 할당되고 해제된다.
  • 해당 메모리 영역이 가득차면 StackOverFlowError가 발생.
  • 힙 메모리에 비해 엑세스 속도가 빠르다.
  • 쓰레드마다 고유의 스택 영역을 가지고 있으므로, Threa-safe하다.

Heap과 Stack 차이점

  • 힙 메모리는 어플리케이션의 모든 부분에서 사용된다.
  • 스택 메모리는 하나의 쓰레드가 실행 될 때 사용된다.
  • 객체가 생성되면 항상 힙 공간에 저장된다.
  • 스택 메모리는 힙 공간에 있는 객체를 참조만 한다.
  • 스택 메모리는 primitive 타입의 지역변수와 힙 공간에 있는 객체 참조 변수만 갖고 있다.
  • 힙 공간에 저장된 객체는 어디서든 접근이 가능하다.
  • 스택 메모리는 다른 쓰레드가 접간할 수 없다. (Heap보다 어느정도 보안성이 있다.)
  • 스택 메모리의 생명주기는 매우 짧다.
  • 힙 메모리는 어플리케이션의 시작부터 끝까지 남아있다.
  • 스택 메모리가 가득차면 java.lang.StackOverFlowError 발생
  • 힙 메모리가 가득차면 java.lang.OutOfMemoryError 발생
  • 스택 메모리의 사이즈는 힙 메모리와 비교시 매우 적다.
profile
개발자가 되는 그날까지

0개의 댓글