TIL
TIL 2일차
Choony
2025. 1. 22. 14:14
Heap 영역과 Stack영역의 차이
Heap 영역의 역할은 다음과 같다.
- 동적으로 생성된 객체와 배열을 저장
Heap 영역의 특징은 다음과 같다.
- 객체와 배열은 생성후 Heap 영역에 저장된다.
- 메모리 크기가 상대적으로 크며, 객체는 프로그램이 실행되는 동안 참조될 수 있다.
- GC(가비지컬렉션)에 의해 자동으로 관리되며, 사용하지 않는 객체는 제거한다.
- 전역적이고 여러 스레드가 같은 Heap 메모리를 접근할 수 있다.
Heap 영역의 장점은 다음과 같다.
- 동적 메모리 할당으로 유연성이 높다.
- 프로그램 실행중에 필요한 메모리만큼 메모리를 할당할 수 있다.
Heap 영역의 단점은 다음과 같다.
- GC로 인해 성능저하가 발생할 수 있다.
- 메모리 접근 속도가 Stack 보다 느리다.
Stack 영역의 역할은 다음과 같다.
- 메서드 호출 시 사용되는 지역변수, 매개변수, 메서드 호출 스택 프레임을 저장한다.
Stack 영역의 특징은 다음과 같다.
- 메서드가 호출되면 Stack 프레임이 생성되고, 메서드가 종료되면 해당 프레임이 제거된다.
- 메모리 할당/해제가 빠른편이다.
- 각 스레드마다 독립적인 Stack을 가진다.
Stack 영역의 장점은 다음과 같다.
- 메모리 접근 속도가 매우 빠르다.
- 정적 구조로 관리가 간단하며, GC의 영향을 받지 않는다.
Stack 영역의 단점은 다음과 같다.
- 메모리 크기가 제한적이다.
- 고정된 크기만큼 메모리를 할당받아 유연성이 부족하다.
그래서 왜 이 둘을 따로 관리하고 각각 저장하는걸까?
성능 최적화
- Stack은 크기가 작고, 데이터가 일정하게 생성/삭제 되므로 고속처리가 가능하다.
- Heap은 큰 데이터를 저장하고 동적 할당이 필요하지만, GC로 관리되므로 메모리 사용이 최적화된다.
데이터 생명주기
- Stack은 짧은 생명주기(Ex. 지역변수)를 가진 데이터에 적합하다.
- Heap은 긴 생명주기(Ex. 객체)를 가진 데이터에 적합하다.
스레드간 데이터 격리
- 각 스레드는 고유한 Stack 영역을 가진다.
- 스레드는 Heap 영역을 공유하여 사용한다.
static 변수는 JVM 메모리 구조중 어디에 위치할까?
static 변수는 JVM 메모리 구조중 메서드 영역에 저장된다.
이는 클래스가 처음 로드되는 시점에 단 한번 메모리에 할당되게 된다. (프로그램 종료 전까지 메모리에 위치하게 된다.)
static 변수는 메서드 영역에 위치하며 클래스의 모든 인스턴스와 공유된다.
JVM의 구조
JVM이 계속 언급돼서 그런지 구조가 궁금해졌다. - 그건 내일 배운다고한다.