Java의 메모리 구조에 대해서 공부했던 내용을 정리한 글입니다.
개인적으로 공부한 자료라 틀린 부분이 있을 수 있습니다.
여기, 같은 기능을 하는 두 개의 프로그램이 있다고 가정해보자
1) 메모리 설계가 잘 되어 있는 프로그램
2) 그렇지 않은 프로그램
1번 프로그램에 비해 2번 프로그램에서는
속도 저하 현상이나 튕김 현상이 일어날 확률이 크다.
보다 안정적인 프로그램을 개발하려면
메모리 구조를 이해하고 적절하게 사용할 수 있어야 할 것이다.
Source Code (.java) 파일을 Java Compiler를 통해서 Byte Code(.Class)파일로 변환한다. (컴퓨터가 이해할 수 있는 코드로 변환)
Byte Code로 변환된 파일을 JVM의 Class Loader 로 보낸다.
Class Loader는 말 그대로 Class 파일을 불러와서 메모리에 저장하는 역할을 한다.
Execution Engine 은 Class Loader에 저장된 Byte Code를 명령어 단위로 분류하여 하나씩 실행하게 하는 엔진이다.
Garbage Collector 는 사용하지 않거나 필요없는 객체들을 메모리에서 소멸시키는 역할을 한다.
Runtime Data Area (Memory Area) 는 JVM이 프로그램을 수행하기위해 운영체제로부터 할당받은 메모리 공간이다.
그렇다면 한 단계 더 들어가서 Runtime Data Area 는 어떻게 생겼을까?
차례대로 살펴 보자.
1) Method Area
2) Heap
3) Stack
4) PC Register
5) Native Method Stack