ART的函数运行机制
ART的函数运行机制
类的加载
dalvik 的类加载的主要过程如下:
app_process作为zygote server通过local socket处理进程创建请求,zygote server是在ZygoteInit.main函数里调用ZygoteInit.runSelectLoop监听。接收到
zygote client的fork请求之后,调用ZygoteConnection.runOnce,调用Zygote.forkAndSpecialize创建新进程进程创建之后,由
ZygoteConnection.handleParentProc来初始化进程,最终会调用ActivityThread.main函数ActivityThread.main -> ActivityThread.attach -> ActivityThread.bindApplication -> Activity.handleBindApplication,handleBindApplication会初始化BaseDexClassLoader。类的加载经过了
ClassLoader.loadClass->BaseDexClassLoader.findClass->DexPathList.findClass->DexFile.loadClassBinaryName->DexFile.defineClassNative->DexFile_defineClassNative(runtime/native/dalvik_system_DexFile.cc) 。
这个初始化过程, art 和 dalvik 都是一样的。 art 的 DexFile_defineClassNative 由 ClassLinker 的 DefineClass 来加载类。