JAVA 코드가 어떻게 실행되는지, 그 데이터들이 어떤곳에 저장되는지 알기 위해서는 JVM을 먼저 이해해야 한다.
1. JVM(JAVA Virtual Machine)
위 그림은 Java 코드가 실행되는 과정이다.
- Java 코드는 Java Compiler를 통해 바이트코드(.class)를 생성한다.
- 바이트코드(.class)를 JVM에 있는 Class Loader에 전달되고 JVM이 프로그램을 실행한다.
JVM이 프로그램을 실행할 때, 필요한 메모리들은 어디에 저장되고 어떤 구조로 생겼는지 알아보자.
2. 메모리 사용 영역
JVM 내의 메모리 영역은 JVM Run-time Data Area라고 한다. 크게 5가지 영역으로 나뉘는데, 메소드 영역, 힙 영역, 스택 영역, PC 레지스터 영역, 네이티브 메소드 스택 영역으로 나뉜다.
- 메소드 영역 (클래스 영역, static 영역) : JVM이 시작될 때 생성되는 공간으로 바이트코드(.class)를 처음 메모리 공간에 올릴 때 초기화되는 대상을 저장하기 위한 메모리 공간이다. 메소드 영역에는 코드에서 사용되는 클래스들을 클래서 로더로 읽어 클래스별로 정적 필드와 상수, 메소드 코드, 생성자 코드 등을 분류해서 저장한다.
- JVM 구동 시작시에 생성이 되며, 종료 시까지 유지되는 공통 영역이다.
- 힙 영역 : JVM이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 영역이다. 즉, new 연산자로 생성되는 클래스와 인스턴스 변수, 배열 등 참조 Type이 저장되는 곳이다.
- 만약 참조하는 변수나 필드가 없다면 의미 없는 객체가 되기 때문에 이것을 JVM은 Garvage Collector를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 삭제한다.
- JVM 스택영역 : 스택영역은 int, boolean 등 기본 자료형을 생성할 때 저장하는 공간으로, 임시적으로 사용되는 변수나 정보들이 저장되는 영역이다.
- 메소드를 호출할 때마다 프레임(중괄호 {})을 추가하고 메소드가 종료되면 해당 프레임을 제거하는 동작을 수행합니다.
- 프레임 내부에는 로컬 변수 스택이 있는데, 기본 타입 변수와 참조 타입 변수가 추가되거나 제거됩니다. 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거됩니다.
'JAVA' 카테고리의 다른 글
[JAVA] 추상클래스와 인터페이스의 차이점? (0) | 2024.12.01 |
---|---|
[JAVA] 상속, 다형성, 추상 클래스 (3) | 2024.11.26 |
[JAVA] 디자인패턴 - 싱글톤 패턴(Singleton Pattern)을 알아보자 (0) | 2024.11.23 |
[JAVA] 객체지향 언어란 무엇인가? - 객체, 인스턴스, 클래스, OOL특징 (2) | 2024.11.22 |
[JAVA] JAVA 기본 문법 - 참조 타입과 참조 변수 (4) | 2024.11.19 |