📙 목차
🧡 학습 목표
- JVM 메모리 영역을 학습한다.
1. JVM 메모리 구조
Java 메모리 구조는 크게 3가지로 나뉜다.
2. 코드 흐름 살펴보기
코드 실행 기각화 도구
https://cscircles.cemc.uwaterloo.ca/java_visualize/
Java Visualizer
Write your Java code here: args: +command-line argument stdin (also visualizes consumption of StdIn) x <!-- Execute code using Python 2.7 Python 3.3 , --> <!-- these two make sense, but are not implemented yet hide frames of exited functions show frames of
cscircles.cemc.uwaterloo.ca
public class Main {
static class Person {
String name;
int age;
String address;
Person(String name, int age) {
this.name = name;
this.age = age;
}
void introduce() {
System.out.println("나의 이름은");
System.out.println(this.name + "입니다.");
System.out.println("나의 나이는");
System.out.println(this.age + "입니다.");
}
int sum(int value1, int value2) {
introduce();
int result = value1 + value2;
return result;
}
}
public static void main(String[] args) {
String name = "Steve";
int age = 20;
Person personA = new Person(name, age);
personA.introduce();
int value1 = 1;
int value2 = 2;
int ret = personA.sum(value1, value2);
System.out.println(ret);
}
}
Frames = Stack 영역
Objects = Heap 영역
3. Method(static) 이해하기
Method Area
- 프로그램이 실행되면 작성했던 모든 파일(.java)의 데이터가 Method(static)영역에 저장된다.
- 프로그램 실행 시점에 한번만 저장된다.
- Method 영역에 저장된 데이터는 프로그램 전체에서 공용으로 활용 가능하다.
- static 으로 선언된 변수와 메서드들이 이 공간에 위치하게 된다.
4. Heap 영역 이해하기
Heap Area
- new 키워드로 생성된 객체는 Heap 영역에 저장된다.
- Stack 영역의 변수가 Heap 영역의 객체를 참조하고 있다.
➕ 가비지 컬렉터(Garbage Collector)
Java의 사용하지 않는 객체를 자동으로 제거하는 기능
- new 키워드로 생성한 객체는 Heap 영역에 저장된다.
- 사용이 끝난 객체는 메모리에 남아 있으면 낭비...
- 가비지 컬랙터가 이러 불필요한 객체를 자동으로 정리해서 메모리를 확보한다.
5. Stack 영역 이해하기
- 메서드가 호출될 때마다 Stack 영역에 메모리가 할당된다.
- 하나의 접시(스택프레임)에 각 메서드의 지역변수가 저장된다.
- 이 영역은 접시를 쌓듯이 LIFO-후입선출 구조이다.
- 메서드가 시작되면 추가되고 메서드가 종료되면 사라지는 구조이다.
- 특정 메서드가 실행되면 해당 메서드의 정보와 변수가 Stack 에 저장되고, 메서드 실행이 끝나면 그 메모리는 자동으로 제거된다.
- 메서드 내에 선언된 지역변수들이 저장되는 공간이다.
💡 LIFO(Last In First Out) - 후입선출
마지막에 들어온 요소가 제일 먼저 나가게 되는 구조를 뜻합니다.
'Java > 강의' 카테고리의 다른 글
[📙 Java 문법 종합반] 2-4. static - 클래스가 공유하는 공간 (0) | 2025.04.15 |
---|---|
[📙 Java 문법 종합반] 2-3. 래퍼클래스(기본형 참조형) (0) | 2025.04.15 |
[📙 Java 문법 종합반] 2-1. 클래스와 객체 (1) | 2025.04.15 |
[📙 Java 문법 종합반] 1-10. 메서드 - 모듈화의 시작 (0) | 2025.04.15 |
[📙 Java 문법 종합반] 1-9. 배열 - 데이터 관리의 시작 (0) | 2025.04.15 |