반응형
개요
- 김영한 강사님의 강의를 듣고 배운 내용을 추가적인 내용과 함께 정리해서 올린다.
본론
자바의 메모리 구조를 조금 간단하게 정리하려고 한다.
JVM 의 메모리 구조는 위와 같다.
여기서 살펴볼 것은 메서드 영역, 힙 영역, JVM 스택이다.
메서드 영역, Method Area
- 메서드 영역은 프로그램을 실행하는데 필요한 공통 데이터들을 관리한다. 프로그램의 모든 영역에서 공유해서 사용한다. (모든 스레드들이 공유한다.!)
- 클래스들의 정보를 포함 : 클래스의 실행 코드, 즉 바이트코드와 필드, 메서드와 생성자 코드 등 모든 실행 코드들의 정보가 포함된다.
- static 영역 : static int, static String과 같이 정적 변수들을 포함하고 있다.
- 쉽게 생각해서 어디서든 접근할 수 있는 static 변수들은 공통으로 접근할 수 있어서 그런 것 같다.
- 런타임 상수 풀 : 프로그램을 실행하는데 필요한 공통 리터럴 상수들을 보관하고 있다.
스택 영역, Stack Area
- 스택 영역은 스레드의 영역이라고 생각하면 쉽다. 자바를 실행하게 되면 main 스레드가 생성되면서 하나의 스택이 생성된다. 스택에 올라가는 스택 프레임은 지역 변수, 중간 연산 결과, 메서드 호출 정보 등을 포함한다.
- 스택 프레임은 메서드를 호출할 때 마다 하나의 프레임이 생겨서 스택 위에 쌓인다. 당연하게도 종료되면 다시 pop() 된다!
- 알고리즘 문제를 풀면서 백트래킹 혹은 DFS를 통해 깊은 메서드 연산이 들어가는 경우
StackOverflowError
가 발생하는 경우가 있는데 아마 이 Stack의 공간이 가득차서 예외가 발생하는 것 같다.
힙 영역, Heap Area
- 힙 영역은 객체와 배열들이 생성되는 영역이다. 가비지 컬렉션의 동작이 이루어지는 주요 영역이며, 더이상 참조되지 않는 값들은 가비지 컬렉션들에 의해 삭제된다.
결론
JVM 메모리를 쉽게 여러 예시들을 들어주며 설명해주셔서 이해가 잘되었다.
자바를 그저 코드로써 보고 공부할 때 이해가 되지 않았던 부분을 긁어줘서 시원하게 이해되었다.
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 대기중인 스레드를 RUNNABLE로 깨우려면 어떻게 해야할까? (0) | 2024.09.21 |
---|---|
[JAVA] 스레드의 상태 (getState()) (3) | 2024.09.02 |
[JAVA] 자바에서 스레드를 만들고 사용하는 방법 (1) | 2024.08.30 |
DES 알고리즘을 이용한 파일 암복호화 (0) | 2023.10.02 |
DES알고리즘(+Key Generator) 구현 (0) | 2023.10.02 |