Why should I know this?

Class linking 메커니즘 - jvm 본문

Study

Class linking 메커니즘 - jvm

die4taoam 2022. 9. 30. 19:42

C++ / JAVA 와 같이 class와 상속을 지원하는 언어들은 class를 linking 하는 과정이 필요하다.

AOSP에 구현된 JVM을 통해 이 과정을 간단히 살펴보자. 왜? 재밌으니까~?

 

Class와 Instance 의 차이를 알고 계십니까?

Class는 설계도이고 Instance는 Class 설계도를 메모리에 적재한 것을 말하죠.

 

위 그림처럼 Class의 설계도는 ..dex=안드로이드 파일에 보관되어 있습니다. class를 생성하는 과정에서 해당 설계도를 기반으로 ClassObject를 만듭니다. Class는 Variable/Method 로 이루어져있고 Variable은 ClassObject에, Method들은 Method 를 보관하는 테이블에 보관되며 해당 Method들에 대한 Index가 vtable에 보관됩니다. (이건 Android만의 특징 )

 

vTable을 만드는 과정은 간단합니다!

1. 생성하려는 자식 class의 부모 class의 vtable을 순서대로 자식 class의 vtable에 채워넣는다.

2. 채워진 vtable에서 만약 override 된 메소드가 있으면 자식 class의 method 를 채워넣는다.

3. 자식 class에 남은 method를 vtable에 채워넣는다.

 

그러면 이렇게 실행되죠.

위 표에서 method @0003 => vtable 3번 메소드 호출이다!

 

이를 통해 compiler 타임에 class가 linking될 때 vtable에 채워질 메소드가 계산된다는 것도 알 수 있습니다.

매우 간단하네요 -끗-

 

 

Comments