운영체제 강의에서 스레드를 학습하면서 스택은 각 스레드가 독립적으로 가지며 힙 영역은 공유한다는 것을 알게되는다. 그래서 멀티 스레드 프로세싱을 할때 힙영역의 값을 동시에 접근하면 문제가 발생하고 이 때문에 동기화를 진행해야하는 경우가 있는데
그렇다면 자바에서는 무엇이 스택에 저장되고 무엇이 힙에 저장되는 것인지 알아보자.
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 |