Notice
Recent Posts
Recent Comments
Link
매일 매일 미라클 코딩
[JAVA] 자바의 메모리 구조 - 스태틱 / 스택 / 힙 본문
Java의 메모리 영역은 크게 4가지로 나눌 수 있다
코드 영역(Code), T 메모리 구조라 불리는 스태틱(Static), 스택(Stack), 힙(Heap) 영역으로 구분된다.
static 영역 ( JVM 종료 시 소멸)
- 개발자가 작성한 모든 클래스와 임포트 패키지 정보는 static 영역에 배치
- static이라는 키워드를 붙여서 선언된 클래스 멤버도 static 영역
- 메소드는 static 있든 없든 static 영역
- 클래스나 메소드가 실제로 호출 될 때 올라가며 JVM이 종료될 때 까지 상주.
- static 영역에 있는 것은 어떤 곳에서나 접근이 가능
- static(전역) 변수는 읽기 전용이 아닌 경우에는 가능한 사용하지 않는게 좋다. 읽기전용 전역 상수 선언 추천.
stack 영역 (컴파일 시 작동)
- 스택 프레임은 여는 중괄호를 만나면 스택 프레임이 생기며, 닫는 중괄호를 만나면 소멸
- 따라서 main 메소드의 닫는 중괄호를 만나게 되면 스택 프레임은 소멸
- main 메소드가 종료되면 JRE는 JVM을 종료하고 JRE 자체도 OS상의 메모리에서 사라짐 -> T 메모리도 끝
- stack 내부에서 선언된 지역변수
- 참조형 변수인 경우 heap의 객체를 가리키는 주소값만 저장
- 쓰레드도 stack 영역 (쓰레드 내부에 Static, Stack, Heap 영역으로 또 나뉨)
heap 영역 (프로세스 종료시 소멸)
- 더보기
생성된 객체(인스턴스)들이 올라갑니다
- 더보기
인스턴스 필드들은 heap 영역에 올라갑니다
- 더보기
메소드들은 heap에 생기지 않음. 여러개 일 필요가 없기 때문.
- 더보기
stack영역에서 참조값을 이용해 heap 영역에 있는 인스턴스를 가르키면 제어 할 수 있게 되는 것
- 더보기
상속으로 인스턴스를 만들었다면 상위 클래스들의 인스턴스들도 같이 생성 (최상위인 Object까지)
참고
https://covenant.tistory.com/139?category=730169
https://siyoon210.tistory.com/124
'BackEnd > JAVA' 카테고리의 다른 글
[JAVA] 오버로딩 & 오버라이딩 (0) | 2021.06.14 |
---|---|
[JAVA] 멀티 쓰레드 VS 멀티 프로세스 (0) | 2021.06.13 |
[자료구조] 해쉬(Hash)구조 - Set 과 Map (0) | 2021.03.26 |
오버라이딩 VS 오버로딩, 그리고 super. / this. (0) | 2020.12.07 |
[JAVA] 상속과 생성자 (feat. super()) (0) | 2020.12.02 |