http://xrath.com/javase/ko/6/docs/ko/technotes/guides/jni/spec/invocation.html#wp9502


위 링크를 가셔서 JNI 스펙중 chapter5. 호출 API를 보시면

저희가 지난 스터디 내내 보았던 JNI_CreateJavaVM 함수에 대한 설명이 나와있습니다.

이 부분도 spec에 관련된 함수인가 봅니다.


암튼 결론을 말하자면,

프로세스가 저 함수를 호출하게 되면 Java VM을 로딩해서 Java VM 역할을 할 수 있는것 같습니다.


JNI는 단순히 자바에서 C라이브러리를 호출하는 인터페이스 외에 (우리가 알고 있었던 내용)

C코드(native code)를 통해 Java Virtual Machine을 컨트롤(클래스 로딩 등)하기 위한 인터페이스도 정의해 놓은 것 같네요.


결과적으로 흐름을 정리하면


1. app_process 로딩

2. app_process가 JNI_CreateJavaVM 호출해서 Java VM으로 동작 (exec 시스템콜을 생각하시면 될듯)

3. Java VM에서 ZygoteInit class 로딩


의 흐름이 될 것 같습니다.


결국 저희가 지난번 봤던 소스는 ZygoteInit 클래스를 로딩하기 위한

자바 버추얼머신 실행이라고 보면 될 것 같습니다.

결국 실제 Zygote는 자바로 짜여졌고 ZygoteInit 클래스가 되겠네요..