JAVA

JVM 스택과 힙 영역 저장 되는 것들

운영체제 강의에서 스레드를 학습하면서 스택은 각 스레드가 독립적으로 가지며 힙 영역은 공유한다는 것을 알게되는다. 그래서 멀티 스레드 프로세싱을 할때 힙영역의 값을 동시에 접근하면 문제가 발생하고 이 때문에 동기화를 진행해야하는 경우가 있는데 

그렇다면 자바에서는 무엇이 스택에 저장되고 무엇이 힙에 저장되는 것인지 알아보자. 

 

Stack

  • Heap 영역에 생성된 Object 타입의 데이터의 참조값(참조 변수)이 할당된다.
  • 원시타입의 데이터가 값과 함께 할당된다.
  • 지역변수와 매개변수가 저장된다.
  • 각 Thread 는 자신만의 stack 을 가진다.

Heap

  • Heap 영역에는 주로 긴 생명주기를 가지는 데이터들이 저장된다. (대부분의 오브젝트는 크기가 크고, 서로 다른 코드블럭에서 공유되는 경우가 많다)
  • 애플리케이션의 모든 메모리 중 stack 에 있는 데이터를 제외한 부분이라고 보면 된다.
  • 모든 Object 타입(Integer, String, ArrayList, ...)은 heap 영역에 생성된다.
  • 몇개의 스레드가 존재하든 상관없이 단 하나의 heap 영역만 존재한다.

 

Stack과 Heap의 관계는 아래와 같다는 것을 알 수 있다.

 

Reference

yaboong.github.io/java/2018/05/26/java-memory-management/

www.youtube.com/watch?v=YlnvCIZQDkw&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=7

 

 

'JAVA' 카테고리의 다른 글

JVM GC(Garbage Collection) - 자바에서 메모리 관리하는 방법  (0) 2021.04.30
==, equals(), hashcode() 비교  (0) 2021.04.30
String Constant Pool 란?  (0) 2021.04.30
자바가상머신(JVM) 이란  (0) 2021.04.30
자바의 열거형(enum)  (0) 2021.02.16