앞에서 변수의 종류에 대해서 짧게 공부를 했는데, 너무 짧았던 것인지 이후 지역변수 이야기가
나올때마다 헷갈려서 제대로 짚고 넘어가려고 한다!
프로그램의 시작부터 종료될때까지 사라지지 않고 존재한다.
따라서 프로그램 실행 중에는 어디서든 사용할 수 있다.
다만 static 데이터를 무분별하게 많이 사용할 경우 메모리 부족 현상이 일어날 수 있다.
✅ 저장 내용
후입선출(LIFO)의 구조를 가지고 스코프의 범위를 벗어나면 스택메모리에서 사라진다.
※ java.lang.StackOverFlowError 발생
스레드 개수마다 생성된다.
✅ 저장 내용
➕ 스택 프레임
메서드가 호출될때 필요한 메모리 덩어리를 묶어서 스택프레임이라고 한다.
하나의 메서드당 하나의 스택프레임이 필요하며, 메소드 호출 범위가 종료되면 해당 메모리는 제거된다.
단 하나의 Heap영역만 존재한다. (stack 영역과의 차이점)
보관되는 메모리 호출이 끝나더라도 삭제되지 않고 유지된다.
그러나 인스턴스를 참조하는 참조변수가 없을 경우에는 가비지컬렉터에 의해 메모리에서 청소된다.
✅ 저장 내용
String str1 = new String("abc");
String str2 = "abc";
str1, str2 → 스택 영역
new 생성자로 생성된 "abc" → 인스턴스로 힙 영역에 저장
"abc" → 상수풀로 클래스 영역에 저장
꾸역꾸역 변수와 메모리 공간에 대해서 공부를 해봤는데, 앞으로도 좀 모르는 부분이 나오면 추가적인 공부를 해가면서 기초를 탄탄히 쌓고 싶다.