728x90
반응형
1. 메모리영역
static
하나의 JAVA 파일은 크게 필드(field), 생성자(constructor), 메소드(method)로 구성된다. 그중
필드 부분에서 선언된 변수(전역변수)와 정적 멤버변수(static이 붙은 자료형) Static 영역에 데이터를 저장
한다. Static 영역의 데이터는
프로그램의 시작부터 종료가 될 때까지 메모리에 남아있게 된다.
다르게 말하면 전역변수가 프로그램이 종료될 때까지 어디서든 사용이 가능한 이유이기도 하다. 따라서 전역변수를 무분별하게 많이 사용하다 보면 메모리가 부족할 우려가 있어 필요한 변수만 사용할 필요가 있다.
Stack
우리가 현재까지 작성하던 메소드 내에서 정의하는 기본 자료형 (int, double, byte, long, boolean 등)에 해당되는 지역변수(매개 변수 및 블럭문 내 변수 포함)의 데이터의 값이 저장되는 공간이 Stack(스택) 영역이다. 해당 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다.
Heap
참조형(Reference Type)의 데이터 타입을 갖는 객체(인스턴스), 배열 등은 Heap 영역에 데이터가 저장된다. 이때 변수(객체, 객체변수, 참조변수)는 Stack 영역의 공간에서 실제 데이터가 저장된 Heap 영역의 참조값(reference value, 해시코드 / 메모리에 저장된 주소를 연결해주는 값)을 new 연산자를 통해 리턴 받는다. 다시 말하면 실제 데이터를 갖고 있는 Heap 영역의 참조 값을 Stack 영역의 객체가 갖고 있다. 이렇게 리턴 받은 참조 값을 갖고 있는 객체를 통해서만 해당 인스턴스를 핸들 할 수 있다.
[자료출처:m.blog.naver.com/heartflow89/220954420688]
2. String pool
string 의 생성방식에는 두가지가 있고,
1. new 연산자를 이용한 방식
2. 리터럴을 이용한 방식(변수에 값을 선언)
2번 리터럴을 이용한 방식으로 생성하면 string 값은 heap 영역내 ‘string pool’에 저장되어 재사용 되지만, 1번 new 연산자로 생성하면 같은 내용이라도 여러개의 객체가 각각 Heap영역을 차지하게 되고 불필요한 메모리를 소모할 수 있다.
[자료출처:starkying.tistory.com/entry/what-is-java-string-pool]
3. garbage collection
Heap에 저장된 데이터가 더 이상 불필요하다면 메모리 관리를 위해 JVM(자바가상머신)에 의해 알아서 해제된다.
728x90
반응형
'Language > Java' 카테고리의 다른 글
[JAVA]Array_배열 (0) | 2020.10.22 |
---|---|
[JAVA]제어문_조건문 (0) | 2020.10.22 |
[JAVA]Calendar03_api사용하여 달력만들기 (0) | 2020.10.20 |
[JAVA]Calendar02_달력만들기 (0) | 2020.10.20 |
[JAVA]Calendar01_년,월,일구하기 (0) | 2020.10.20 |