값을 저장할 수 있는 메모리 공간
데이터 타입 + 변수 명
기본 타입
정수, 실수, 문자, 논리 리터럴을 저장하는 타입
스택(Stack) 영역에 생성
정수 타입: byte, short, char, int, long
실수 타입: float, double
논리 타입: boolean
참조 타입
객체의 주소를 참조(저장)하는 타입
힙(Heap) 영역에 생성
참조 타입: 문자열, 배열, 열거형, 클래스, 인터페이스
jvm이 사용하는 메모리 영역
jvm이 시작되면 운영체제에게서 할당받은 메모리 영역을 아래와 같은 세부 영역으로 구분해서 사용한다.
코드에서 사용되는 클래스(.class)들을 로더(Loader)로 읽어서 클래스별로 런타임 상수풀, 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드 등으로 분류해서 저장한다.
JVM이 시작할 때 생성되고 모든 스레드가 메소드 영역을 공유한다.
객체와 배열이 생성되는 영역 -> 참조 타입 변수가 저장되는 영역
참조하는 변수나 필드가 없다면, 의미 없는 객체(=쓰레기)로 분류되어 가비지 컬렉터가 자동으로 제거한다.
(객체를 직접 제거하는 방법을 자바에서 제공하지 않음)
Thread의 존재와 상관없이 단 하나의 힙 영역만 존재한다.
힙 영역에 있는 Object들을 가리키는 레퍼런스 변수가 스택에 올라간다.
힙 영역에 생성된 Object 타입의 데이터의 참조값이 할당.
원시타입의 데이터가 값과 함께 할당 -> 기본 타입 변수가 저장되는 영역
각 스레드마다 자신만의 스택 영역이 존재한다.
스레드가 시작할 때 할당된다.
변수의 값이 같은지 검사한다.
동일한 객체를 참조하는 지 검사한다.
-> 주소가 같은 지 확인.