인프런 커뮤니티 질문&답변

감바스님의 프로필 이미지
감바스

작성한 질문수

김영한의 실전 자바 - 기본편

자바 메모리 구조

객체 생성과 메서드 호출에 대한 메모리 관점 흐름에 대해 질문 있습니다.

작성

·

59

·

수정됨

0

  1. 메서드 프레임은 메서드 영역에 있는 메서드 코드를 기반으로 생성되나요?

  2. 객체 생성과 메서드 호출에 대한 메모리 관점 흐름을 정리 해봤는데 맞게 정리한건지 궁금합니다. "객체 생성시 힙 영역에 객체 저장 -> 메서드 호출시 메서드 영역에 있는 호출한 메서드 코드를 찾음 -> 찾은 메서드 코드로 스택 영역에 메서드 프레임을 생성함"

  3. 힙 영역에서 메서드 영역에 있는 본인의 메서드 코드를 어떻게 찾는지 궁금합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

감바스님, 객체 생성과 메서드 호출의 메모리 관점에서 흐름을 매우 잘 정리하셨습니다. 이해를 돕기 위해 각각의 질문에 대한 답변을 드리겠습니다.

  1. 메서드 프레임은 JVM의 스택 영역에 생성됩니다. 메서드 영역에는 클래스 정보(클래스 데이터, 메서드 코드 등)가 로드되며, 메서드 호출 시 해당 메서드의 코드를 기반으로 메서드 프레임이 스택 영역에 생성됩니다.

  2. 말씀하신 내용이 대체로 정확합니다. 객체 생성 시 해당 객체의 인스턴스 변수들이 힙 영역에 저장됩니다. 메서드 호출 시, JVM은 메서드 영역에 로드된 해당 메서드의 코드를 찾고, 이를 토대로 스택 영역에 메서드 프레임(메서드 실행에 필요한 지역 변수, 매개 변수, 반환 값 등을 포함하는 공간)을 생성합니다.

  3. 힙 영역에 있는 객체가 직접 메서드 영역에 접근해서 메서드 코드를 ‘찾는’ 것이 아니라, 메서드 호출 과정에서 JVM이 메서드 영역에서 해당 메서드의 코드를 참조합니다. 객체는 클래스 인스턴스이며, 메서드 호출은 해당 클래스 타입에 따라 메서드 영역에 정의된 코드를 실행하는 방식으로 이루어집니다. 객체의 메서드 호출은 런타임에 JVM이 관리하는 과정을 통해 이루어지며, 실행될 메서드의 코드 또한 메서드 영역에 적재된 클래스 정보를 바탕으로 참조됩니다.

모든 질문에 대한 답변이 이해가 되셨길 바라며, 추가적인 궁금증이 있으시면 언제든지 질문해주세요.

감바스님의 프로필 이미지
감바스

작성한 질문수

질문하기