안드로이드 자바 코틀린 기초 지식/자바 기초지식
자바 메모리 구조 (Stack, Heap, Static)
Everyday Growing Engineer
2022. 8. 2. 22:23
Static 영역 :
- 하나의 JAVA 파일은 크게 필드(field), 생성자(constructor), 메소드(method)로 구성된다. 그중 필드 부분에서 선언된 변수(전역변수)와 정적 멤버변수(static이 붙은 자료형) -> Static 영역에 데이터를 저장한다. Static 영역의 데이터는 프로그램의 시작부터 종료가 될 때까지 메모리에 남아있게 된다. 다르게 말하면 전역변수가 프로그램이 종료될 때까지 어디서든 사용이 가능한 이유이기도 하다. 따라서 전역변수를 무분별하게 많이 사용하다 보면 메모리가 부족할 우려가 있어 필요한 변수만 사용할 필요가 있다.
Stack 영역 :
- 지역변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등이 생성되는 영역입니다.
- 우리가 현재까지 작성하던 메소드 내에서 정의하는 기본 자료형(int, double, byte, long, boolean 등)에 해당되는 값이 저장되는 공간이 Stack(스택) 영역이다.
- 해당 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다.
- 기본형 타입의 경우 값이 저장되고 참조형 타입 변수는 참조값만 저장된다. 이 참조값은 Heap 영역에 있는 객체를 가르키는 주소
Heap 영역 :
- 참조형 데이터 타입을 갖는 객체, 배열 등의 데이터가 저장되는 메모리 영역이다. (new 연산자를 통해 생성된 객체)
- Stack 영역의 공간의 변수(객체, 객체 변수, 참조 변수)는 실제 데이터가 저장된 Heap 영역의 주소 값을 new 연산자를 통해서 반환받는다.
- 객체의 실제 데이터는 Heap 영역에 올라간다.
- 즉, Heap 은 참조형 데이터 객체의 실제 데이터들이 담기는 공간이고, Static 영역의 객체는 Heap 영역의 참조 값이 갖게 된다.
정리 :
- 전역변수 & static 변수 -> Static 영역
- 기본 자료형 지역변수 & 참조형 타입 참조값 -> Stack
- 참조형 데이터 타입을 갖는 객체, 배열 -> Heap