-
JVM 메모리 - heap, stackTECH/Java 2022. 8. 7. 11:24
JVM의 메모리는 크게 힙, 스택, 메타 영역으로 나뉜다.
그 중 스택과 힙 영역에 대해 먼저 알아보자.
Stack
- 스택은 쓰레드 생성과 함께 생성된다. 쓰레드는 자신의 스택만 볼 수 있다. 즉 쓰레드 세이프하다.(다른 쓰레드의 데이터를 볼 수 없다.)
- 함수가 호출될 때 파라미터의 복제본이 스택에 push되고, 해당 함수의 변수들도 스택에 push 된다.
- 함수가 리턴할 때 스택에 저장된 데이터들이 pop된다.
- LIFO 구조
- Stack에 접근하는 것은 heap 메모리에 접근하는 것보다 빠르다.
Heap
- 스택은 객체와 같은 복잡한 데이터를 저장하는데 사용할 수 없다.
- primitive 타입과 같은 단순한 데이터 타입만 저장할 수 있ㄷ가.
- 스택에 저장되지 않은 모든 데이터는 heap에 저장된다.
- 스택과 달리 heap은 모든 쓰레드에서 공유하는 영역이다.
- 애플리케이션의 모든 데이터는 스택을 통해 접근할 수 있는데,
- stack에만 저장되어 있는 경우 (primitive) 스택을 통해 바로 접근할 수 있고,
- heap에 저장되어 있는 경우(Object) 스택에 저장된 힙에 대한 레퍼런스를 통해 접근할 수 있다.
- `new` 키워드 : 힙에서 해당 객체를 저장할 수 있는 만큼 큰 free 스페이스를 찾는다.
출처
- https://www.baeldung.com/java-stack-heap
- UDEMY Java Application Performance Tuning and Memory Management
'TECH > Java' 카테고리의 다른 글
Singleton Pattern이란? (0) 2022.12.16 Managed Language 자바, 자바는 어떻게 힙에서 제거할 객체를 알아낼까? (0) 2022.11.29 Java String Pool이란? (0) 2022.11.17 Mono.zipWith 혹은 Mono.zipWhen이 호출되지 않을 때 (0) 2022.10.23 Slack api 호출시 account_inactive 에러가 발생하는 경우 (0) 2022.02.05