6.4.1 JVM 구조
- JVM은 메서드 영역, 힙 영역, 호출스택 영역으로 구분할 수 있다.
6.4.2 메서드 영역(method area)
- 어떤 클래스가 사용되면, JVM은 해당 클래스파일(.class)의 파일을 읽어 분석하여 클래스에대한 정보를 메서드 영역에 저장한다. 이때, 클래스 변수도 메서드 영역에 로딩되어 모든 인스턴스가 클래스 변수를 공유한다.
6.4.3 힙 영역(heap area)
- 프로그램 실행중 생성되는 인스턴스가 생성되는 공간
- 인스턴스 변수들이 생성되는 공간
- 각 인스턴스는 힙 영역안에서 독립적인 공간을 갖는다.
6.3.5 호출스택(call stack, execution stack)
- 작업에 필요한 메모리 공간제공
- 지역변수(매개변수 포함)및 중간 연산 결과를 저장하는데 사용
- 작업을 마치면 메모리 반환
6.3.6 메서드 호출에 따른 메모리 할당 순서
- 메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당 받는다.
- 실행중인 메서드에서 다른 메서드를 호출할 경우 실행중인 메서드를 일시정지하고 호출한 다른 메서드를 스택에 할당한다.
- 호출된 작업이 끝나면 메모리를 반환하고 메서드 수행 결과를 일시정지된 메서드로 가져간 뒤 메서드 일시정지 해제
6.3.7 기본형 매개변수와 참조형 매개변수
- 기본형 매개변수 : 기본형 값 복사. 변수의 값을 읽기만 가능
- 참조형 매개변수 : 인스터스의 주소 복사. 값을 읽고 변경 가능
class Data{ int x;}
//기본형 매개변수
Data d1 = new Data();
d1.x = 10
chage(d1.x) //기본형 값 복사
//참조형 매개변수
Data d2 = new Data();
chage(d2) //인스턴스 주소 복사
6.3.8 배열을 이용한 값 변경
- 배열을 매개변수로 전달할 경우 배열의 주소가 복사되기 때문에 변경 가능
class A{
public static void main(String[] args){
int[] x = {10};
chage(x);
System.out.println(x[0]) // x = 1000
}
static void change(int[] x){
x[0] = 1000;
}
}
6.3.9 참조형 반환타입
- '객체의 주소' 반환
Data a(Data d){
Data tmp = new Data();
tmp.x = d.x
reuturn tmp;
}
'자바의 정석 정리' 카테고리의 다른 글
자바의 정석 - 6.6 클래스와 인스턴스 (0) | 2022.06.10 |
---|---|
자바의 정석 - 6.5 재귀호출 (0) | 2022.06.10 |
자바의 정석 - 6.3 메서드 (0) | 2022.06.10 |
자바의 정석 - 6.2 변수 (0) | 2022.06.10 |
자바의 정석 - 6.1 객체지향언어 (0) | 2022.06.10 |