-
Java | Java 메모리 구조JAVA/JAVA 2020. 1. 28. 22:10
JAVA 메모리 구조
Method Area(= Static Area)
JVM이 읽어들인 클래스와 인터페이스에 대한 런타임 상수 풀,
멤버 변수(Instance 변수), 클래스 변수(Static 변수), 생성자, 메소드 등을 저장하는 공간- 프로그램이 시작되면 가장 먼저 메모리에 올라오는 부분
→ main() 메소드가 가장 먼저 메모리에 올라감 - 정적 변수, 정적 메소드 선언시 static영역에 할당됨
→ 과도하게 사용시 메모리가 낭비되거나 메모리에 과부하가 걸릴 수 있음
Heap
프로그램에서 사용하는 동적 메모리(dynamic memory) 공간
- new 연산자로 객체 생성시 객체가 저장되는 공간
- ex) Car sonata = new Car();
sonata 변수는 스택 메모리에 할당되며,
sonata에는 Car 클래스의 인스턴스가 생성된 힙 메모리의 주소가 대입됨
(즉, 스택에 저장된 sonata 변수가 힙에 저장된 인스턴스를 가리키게 됨)
Stack →→→→→ Heap sonata → → → → → Car 클래스의 인스턴스
Stack
자료가 상자처럼 쌓이는 자료 구조를 말함
마지막에 추가된 자료부터 순서대로 꺼내서 사용할 수 있으며
LIFO(Last In First Out) 구조라고 부름- 지역변수가 저장되는 영역이며, 한쪽은 막혀있고 한 쪽은 열려있는 구조
- 메소드가 호출될 때 메모리에 할당되는 영역
메소드의 매개변수와 메소드 내부의 지역변수가 임시로 저장됨 - 메소드를 호출할 때마다 각각의 스택프레임(해당 메소드만을 위한 공간) 생성
- 메소드 호출시 먼저 사용되는 변수가 아래쪽부터 저장되며
메소드 호출이 끝나면 마지막에 저장된 것부터 해제됨 - ex) int clacSum(int kor, int eng, int mat){
int total = kor + eng + mat;
return total; }
kor, eng, mat 매개변수와 total 지역변수가 스택 메모리에 할당됨
저장 순서 변수 해제 순서 ④ total ① ③ mat ② ② eng ③ ① kor ④
자바의 메모리 구조에 대해 간단하게 살펴보았습니다.
스택 구조는 먼저 저장된 것이 나중에 나간다는 특징이 있습니다.
다양한 문제로 응용되기도 하기 때문에 스택이라는 자료 구조가
어떻게 생겼다는 것 정도는 알아두면 나중에도 도움이 될 것 같습니다.또한 객체 생성시 변수는 스택 메모리에,
인스턴스는 힙 메모리에 나누어져 저장된다는 점을 기억해 두시면 좋을 것 같습니다.'JAVA > JAVA' 카테고리의 다른 글
Java | Array 배열 (0) 2020.01.28 Java | Static 정적 변수 & 정적 메소드 (0) 2020.01.28 Java | This (0) 2020.01.22 Java | 메소드 Overloading & 생성자 Overload (0) 2020.01.22 Java | Constructor 생성자 (0) 2020.01.22 - 프로그램이 시작되면 가장 먼저 메모리에 올라오는 부분