Java
[JAVA] 객체가 생성될 때 Stack과 Heap은
차가운개발
2024. 12. 9. 11:16
객체가 생성될 때 발생하는 과정
1. 객체 생성 요청
객체를 생성하기 위해 new 키워드를 호출한다.
Class obj = new Class();
객체를 힙 메모리에 할당하고, 객체의 참조(reference)를 반환한다.
2. 힙 메모리에 메모리 할당
- 1. 힙 영역에 공간 확보
JVM은 객체를 저장할 크기만큼의 메모리를 힙에서 확보한다 - 2. 메모리 초기화
할당된 메모리를 초기화한다
모든 인스턴스 변수는 기본 값으로 초기화 된다 - 3. 객체의 메타데이터 설정
객체가 어떤 클래스의 인스턴스인지 식별하기 위해 클래스 메타데이터가 연결된다
가상 메서드 테이블에 대한 참조가 포함된다(다형성 지원을 위함)
3. 생성자 호출
- 1. 스택에 생성자 호출 정보 저장
생성자를 호출하면 생성자의 매개변수와 지역 변수가 스택에 저장된다
호출된 생성자가 객체를 초기화하는 작업을 수행한다 - 2. 필드 초기화
생성자가 명시적으로 필드 값을 초기화하거나, 명시적인 초기화가 없으면 기본값이 유지된다. - 3. 상위 클래스 생성자 호출
생성자 내부에서 암묵적으로 또는 명시적으로 상위 클래스의 생성자가 호출된다 - 4. 생성자 종료 및 반환
생성자 호출이 끝나면 스택에서 호출 정보가 제거된다
4. 스택에 참조 저장
힙에 생성된 객체의 주소가 스택 영역에 저장된다