자바 메모리 구조에 대해 질문 있습니다.
클래스 정보들이 메서드 영역에 올라 간다고 했는데 만약 A라는 클래스에 멤버 변수, 메서드, 생성자 들이 존재한다고 할때 값이 아닌 코드들 자체가 이진수로 바껴서 메서드 영역에 올라가는 건가요?
기본형 변수든 참조형 변수든 변수 자체를 가리키는 주소가 따로 있는지 궁금합니다.
pdf 자료 3페이지에 "자바에서 특정 클래스로 100개의 인스턴스를 생성하면, 힙 메모리에 100개의 인스턴스가 생긴다. 각각의 인스턴스는 내부에 변수와 메서드를 가진다." 라는 내용이 있는데요 여기서 내부에 변수와 메서드를 가진다. 부분이 이해가 안갑니다. 변수를 가진다는건 변수에 담긴 값과 변수 정보가 저장된다는건가요? 그리고 메서드를 가진다는건 이미 메서드 영역에 메서드 코드가 저장되어 있는데 왜 힙 영역에도 저장되는지 모르겠습니다.
감사합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
감바스님의 자바 메모리 구조에 대한 질문에 답변드립니다.
네, 맞습니다. A 클래스에 있는 멤버 변수, 메서드, 생성자 등의 코드가 컴파일 시점에 바이트코드(이진수 형태)로 변환되어, 실행 시 메서드 영역에 로드됩니다. 이 메서드 영역에는 클래스에 관련된 정보들이 클래스 단위로 저장되며, 이는 모든 스레드가 공유하는 영역입니다.
변수를 가리키는 주소는 기본형 변수와 참조형 변수에서 다소 차이가 있습니다. 기본형 변수의 경우 값이 직접 저장되며, 참조형 변수는 객체의 주소를 저장합니다. 즉, 참조형 변수는 힙 메모리에 저장된 객체를 가리키는 주소 값을 가집니다.
클래스의 인스턴스(객체)가 생성될 때, 힙 메모리에 해당 객체의 상태(필드)를 저장할 공간이 할당됩니다. 여기서 ‘변수를 가진다’는 말은 객체의 상태를 나타내는 필드 값들이 힙에 저장된다는 의미입니다. ‘메서드를 가진다’라는 말은 조금 혼란스러울 수 있는데, 실제로 메서드의 코드 자체가 각 객체마다 힙 메모리에 복사되어 저장되는 것은 아닙니다. 메서드는 모든 객체가 공유하여 사용할 수 있는데, 이는 메서드 영역에 한 번만 저장되며, 객체는 이 메서드 영역의 코드를 공유하여 사용합니다. 따라서, 객체가 메서드를 ‘가진다’는 표현은 객체가 메서드 영역에 저장된 메서드를 호출할 수 있다는 의미로 이해하시면 됩니다.
질문에 대한 답변이 도움이 되었길 바랍니다.
질문있습니다
0
25
1
1번 문제 질문입니다.
0
31
1
음악플레이어 문제 중 코드질문
0
26
1
9장 상속 문제와 풀이 질문
0
38
1
강의 자료에 사소한 오타가 있습니다.
0
48
2
매서드 참조값 반환??
0
66
1
접근제어자 - 쇼핑카트 문제에서 상품출력 부분 메서드
0
69
1
자바 기본편 - .(dot)에 관한 질문입니다!
0
85
1
공부방법
0
74
2
상속관계에서 멤버 변수는 오버라이딩 되는 개념이 아닌가요?
0
82
1
static method 질문
0
66
1
캡슐화 문제풀이 ShoppingCart 요구사항에 문제가 있어보입니다. 피드백 주세요
0
95
1
Method1에서 Student 객체
0
73
1
3강 18. null 질문
0
67
1
this 와 super의 호출 순서는 부모-자식관계 떄문만인가요?
0
75
1
팩토리 메서드 패턴과 일반 생성자 사용의 장단점
0
97
1
문의
0
104
1
9장 상속 문제와 풀이 부분 궁금한게 있어서 질문드립니다
0
89
1
상속과 그에 따른 메모리 구조 질문
0
62
1
call메소드에서 멤버에 접근하는 방식을 이해 못 했습니다
0
74
1
수강기한
0
135
1
기본편 객체지향 프로그래밍에 대한 정의
0
86
1
섹션10 상속 메모리 구조 및 문제 관련 질문
0
87
1
추가 지식 학습
0
152
2





