수업시간에는 단순히
(데이터 타입) (변수이름) = (객체)
로 변수에 객체의 주소를 담는다고 배운다. 그리고 우리는 (변수이름).(객체 멤버), “.” 객체 접근 연산자로 변수에 들어가 있는 주소가 가리키는 객체에 접근해서 그 멤버를 사용한다. 어디서 대강 들은 내용으로는 JVM이 클래스를 로드할 때 변수 이름과 관련된 어떤 행동을 하고 그 결과를 테이블 형태로 갖는다고 했던 것 같긴 한데,, 좀 더 정확하게 어떤 일이 일어나는 지 알고 싶다.
ex) 참조 변수안에는 주소값만 있고 원하는 객체 멤버를 가지고 접근 연산자로 heap영역에 가면 heap영역에 있는 객체 안에 객체 멤버가 어디있는 지에 관한 정보가 저장되어 있다.(예를들어 멤버가 var이라는 필드라면 객체안에는 var변수가 heap 영역 몇번째 인덱스에 있다. 이런식,,,?)
또 내가 알기로는 같은 클래스로 인스턴스를 많이 만들어도 heap영역에 각각의 인스턴스 변수는 저장이 되지만 메서드는 method area에 있는 코드를 공유한다고 한다. 인스턴스를 만들어서 접근 연산자로 메서드에 접근하면 heap으로 갔다가 메서드 코드가 있는 method area로 가서 메서드 코드를 stack으로 불러오는 건가? 그런 다음 메서드 내에 인스턴스 변수를 사용하는게 있다면 다시 heap으로 가서 인스턴스 변수를 가져오는가?