天天看點

openjdk源碼==類加載過程

jdk\src\share\bin\main.c     

main

JLI_Launch

jdk\src\share\bin\java.c  JLI_Launch

jdk\src\solaris\bin\java_md_solinux.c    

        JVMInit

        ContinueInNewThread

        JavaMain

        InitializeJVM

jdk\src\share\bin\java.h

        CreateJavaVM

調用JNI

hotspot\src\share\vm\prims\jni.cpp

        JNICALL JNI_CreateJavaVM(

hotspot\src\share\vm\runtime\thread.cpp

        jint Threads::create_vm

hotspot\src\share\vm\runtime\init.cpp

        init_globals

        classLoader_init(); //讀取JDK自己的rt.jar中class的位址并儲存位址

        universe2_init();//從上面的位址中加載解析JDK自己的class檔案到記憶體

hotspot\src\share\vm\memory\universe.cpp

         universe2_init()

        void Universe::genesis(TRAPS) {

        SystemDictionary::initialize(CHECK);

hotspot\src\share\vm\classfile\systemDictionary.cpp

        void SystemDictionary::initialize(TRAPS) {

        initialize_preloaded_classes(CHECK);

        initialize_wk_klasses_until(jsr292_group_start, scan, CHECK);

        k = load_instance_class(name, class_loader, THREAD);

         k = ClassLoader::load_classfile(class_name, CHECK_(nh));

===================

HotSpot源碼篇-執行main方法 - 簡書