▶ 참고 (자바 메모리와 static 구조)
https://zoooom-in.tistory.com/57
[김영한_자바기본][7. 자바 메모리 구조와 static] 자바 메모리 구조 이해 / 스택과 큐 자료 구조(p.1-
메서드 영역: 프로그램의 클래스 정보와 정적 변수를 저장하는 공간 힙 영역: 동적으로 생성되는 객체들을 저장하는 공간 스택 영역: 메서드 호출 및 파라미터를 임시로 저장하는 공간 **메인 메
zoooom-in.tistory.com
특징 | 저장되는 데이터 | |
스택 영역 (Stack) | - 메서드 호출과 관련된 지역 변수 및 매개 변수 저장 - 메서드 호출이 끝나면 자동으로 메모리에서 제거 - LIFO(Last In First Out) 구조를 따름 ※ Main 메서드 부분 생각 / 메서드 호출 |
- 지역 변수 - 매개 변수 |
힙 영역 (Heap) | - 동적으로 생성된 객체와 인스턴스 변수 저장(배열) - 자바의 가비지 컬렉터(GC)가 사용되지 않는 객체를 자동으로 메모리에서 해제함 ※ new 생성 생각 |
- 객체 - 인스턴스 변수 |
메서드 영역 (Method Area) | - 클래스 정보, 메서드 코드, static 변수 등이 저장 - 모든 스레드가 공유함 |
- 클래스 정보 - static 변수 |
[스택 / 힙 / 메서드 영역 예시1]
public class MemoryExample {
// 메서드 영역: 클래스 변수 (static)
static int staticVar = 10;
// 힙 영역: 인스턴스 변수
int instanceVar = 20;
public static void main(String[] args) {
// 스택 영역: 지역 변수
int localVar = 30;
// 힙 영역: 객체 생성
MemoryExample example = new MemoryExample();
// 스택 영역: 객체의 메서드 호출
example.display();
}
void display() {
// 스택 영역: 지역 변수
int displayLocalVar = 40;
// 메서드 실행 중에 사용되는 인스턴스 변수 (힙 영역에서 가져옴)
System.out.println("Instance Var: " + instanceVar);
System.out.println("Display Local Var: " + displayLocalVar);
}
}
[스택 / 힙 / 메서드 영역 예시2]
public class Data {
// 메서드 영역: 클래스 정보 및 메서드 코드
private int value; // 힙 영역: 인스턴스 변수
public Data(int value) {
// 메서드 영역: 생성자 메서드 코드
this.value = value;
}
public int getValue() {
// 메서드 영역: 메서드 코드
return value;
}
public static void hello() {
// 메서드 영역: static 메서드 코드
System.out.println("hello");
}
}
public class Main {
public static void main(String[] args) {
// 스택 영역: main 메서드의 스택 프레임
Data data = new Data(3);
// 힙 영역: new Data(3)로 생성된 Data 객체
// 스택 영역: data 참조 변수
System.out.println(data.getValue());
// 스택 영역: getValue() 메서드 호출
Data.hello();
// 스택 영역: hello() 메서드 호출
}
}
※ 멤버변수는 인스턴스 변수와 static변수를 통칭하는 말
728x90
'용어 > java' 카테고리의 다른 글
[국비][JAVA] 인터페이스와 추상(abstract) 차이 (0) | 2024.06.02 |
---|---|
[국비][JAVA] 메서드 오버로딩, 오버라이딩 차이 (0) | 2024.05.30 |
[국비][JAVA] 참조값 및 객체 이해하기_예시 (0) | 2024.05.30 |
[국비][JAVA] 배열 이해 및 기본형, 참조형 기본 값 (0) | 2024.05.28 |
[국비][JAVA] 오버플로우와 언더플로우 개념 / 쉬프트 연산자 (0) | 2024.05.27 |