JVM은 메모리 공간을 스택(Stack)과 힙(Heap) 공간의 두 부분으로 나눴습니다. 스택 공간은 주로 메소드 실행 순서와 지역 변수를 저장하는 데 사용됩니다.
스택은 항상 LIFO 순서로 저장된 블록을 쌓는 반면 힙 메모리는 메모리 블록을 할당 및 할당 해제하기 위해 동적 할당을 사용했습니다.
힙에 할당된 메모리는 다음 이벤트 중 하나가 발생할 때까지 지속됩니다.
- 프로그램 종료
- 메모리 여유 공간
대조적으로 스택에 할당된 메모리는 함수가 반환될 때까지 지속됩니다. 다음은 차이점입니다.
Sr. 아니요. | 키 | 스택 | 힙 메모리 |
---|---|---|---|
1 | 기본 | 스택 메모리는 객체의 참조 변수인 지역 변수와 같이 수명이 매우 짧은 항목을 저장하는 데 사용됩니다. | 힙 메모리는 객체 및 JRE 클래스를 저장하기 위해 할당됩니다. |
2 | 순서 | 스택은 항상 LIFO(후입선출) 순서로 예약됩니다. | 힙 메모리는 동적 할당이며 메모리에 블록을 할당 및 할당 해제하는 고정된 패턴이 없습니다. |
3 | 크기 | JVM 매개변수 -XSS를 사용하여 스택 메모리 크기를 늘릴 수 있습니다. | JVM 옵션 -Xms 및 -Xmx를 사용하여 힙 메모리 크기를 늘리거나 줄일 수 있습니다. |
4 | 가시성 | 변수는 소유자 스레드에게만 표시됩니다. | 모든 스레드에서 볼 수 있습니다. |
5 | 예외 | JVM은 java.lang.StackOverFlowError를 발생시킵니다. | JVM은 java.lang.OutOfMemoryError를 발생시킵니다. |