메모리 영역
JVM은 운영체제에서 할당받은 메모리 영역을 메소드 영역, 힙 영역, JVM 스택 영역 3가지로 구분해서 사용한다.
메소드 영역
메소드 영역은 JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역이다. 메소드 영역은 정적 필드(static field), 상수(constant), 메소드 코드, 생성자(constructor) 등을 분류해서 저장한다.
힙 영역
힙 영역은 객체와 배열이 생성되는 영역이다. 힙 영역에 있는 객체와 배열을 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다. 만일 참조하는 변수가 없다면 JVM이 스스로 Garbage Collector를 실행시켜 자동으로 제거한다. 따라서 힙 영역의 쓸모없는 객체를 제거하기 위해 따로 코드를 작성할 필요가 없다.
JVM 스택 영역
JVM 스택은 메소드를 호출할 때마다 프레임을 추가하고, 메소드가 종료되면 해당 프레임을 제거한다. 스택 영역에 변수가 생성되는 시점은 변수가 초기화가 될 때, 즉 최초로 변수에 값이 저장될 때이다. 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거된다.
참조 타입
자바의 타입은 크게 기본 타입(primitive type)과 참조 타입(reference type)으로 분류된다.
기본타입 - 정수 타입, 실수 타입, 논리 타입
참조타입 - 배열 타입, 열거 타입, 클래스, 인터페이스
두 타입의 제일 큰 차이는 저장되는 값이다. 기본 타입은 값 그 자체가 변수 안에 저장되지만, 참조 타입은 메모리의 주소를 변수 안에 저장한다. 참조 타입 변수는 null 값을 가질 수 있는데, 이는 참조하는 주소가 없다는 의미이다.
'공부 자료 > Java' 카테고리의 다른 글
열거 타입(enum) (0) | 2022.11.10 |
---|---|
배열 복사와 for문 (0) | 2022.11.10 |
논리연산자 (0) | 2022.11.08 |
삼항연산자 (0) | 2022.11.08 |
자동 타입 변환/ 강제 타입 변환 (0) | 2022.11.07 |