자바 메모리구조(메소드, 스택, 힙영역)

이세라·2024년 10월 11일
<메모리구조>

method 메소드영역					|		stack 영역		|		heap 영역
(=class영역, 데이터영역, ...)


1) method 영역
	- 클래스와 메서드가 위치
	static 멤버
2) stack 영역
	- 기본 자료형(byte, short, int, long, float, double, boolean, char)이든
	참조 자료형이든 상관없이 "지역변수"가 위치하는 영역
	- 지역변수는 반드시 개발자가 직접 초기화를 시켜야 한다.
3) heap 영역
	- 객체가 위치하는 영역
	- 참조 자료형 변수가 가리키는 실제 데이터가 있는 공간
	- 변수를 강제(자동으로) 초기화 시킴
		int : 0, long : 0L, florat : 0.0f, double : 0.0, 참조자료형 : null
* 객체의 위치를 참조 변수에 저장하는 이유
	new 키워드 이용해 객체를 생성하면 자바 가상 머신(JVM)은 힙 메모리 내에
	비어 있는 공간을 찾아 그 공간에 객체를 생성
	힙 메모리의 빈 공간은 그때 그때 다르므로 객체가 생성될 때마다 다른 위치에 저장됨
	따라서 자바 가상 머신(JVM)이 생성한 객체의 위치를 반드시 알아야 개발자가 해당 객체를
	사용할 수 있음.
	ex) heap이라는 옆 강의실 사물함에 물건을 넣어 놓고, stack이라는 내 강의실에서
	찾아갈 수 있게 하기 위해서 사용한다.
* new 키워드
	- heap메모리에 넣어라 라는 의미
	- jvm이 비어 있는 공간에 객체를 생성해줌
	- 어느 공간에 넣었는지 알 수 없기 때문에 jvm은 객체의 위치 정보를 리턴해 주어야 하고
	  그 리턴된 값을 참조변수에 저장
* 스택메모리와 힙메모리 초기화
	- 스택 메모리에 위치하고 있는 참조 자료형 변수의 빈 공간을 초기화 할 때는
	null값을 사용할 수 있다.
	- null값은 힙 메모리에 위치(주소, 번지)를 가리키고 있지 않다는 의미
	즉, 연결된 실제 데이터가 없다는 것을 의미
	- 스택 메모리 공간은 값을 초기화 하지 않으면 빈 공간으로 존재, 따라서 해당 변수를 출력하면 오류
	- 힙 메모리는 어떤 상황에서도 빈 공간이 존재하지 않음
		값을 주지 않으면 컴파일러가 값을 강제로 초기화
		힙 메모리 영역은 미완성된 것은 올릴 수가 없다.
profile
개린이입니다...

0개의 댓글