openJdk文件数众多,在那先入手?我是从java.c开始,我采用的sourceInside阅读器,由于这是学习,本着能看懂多少是多少的态度,不必拘泥于各个细节,先从os/linux/laucher/java.c看起。
在java.c的main函数内调用LoadJavaVm,具体创建vm的函数为JNI_CreateJavaVM,其采用函数指针,而不采用直接调用,没看出来有什么好处,为什么多一个间接层?为了程序的可移植?在此先不管它。
JNI_CreateJavaVM函数内部创建虚拟机线程,由于程序考虑多系统的移植,故抽取了一个间接层Threads,在Threads.create_vm下面进行java虚拟机线程的初始化工作(init_globals())。线程的创建实现这类也是有意思的工作,以后有空的话再慢慢描述。在init_globals()之后,启动虚拟机线程,垃圾回收这些后台工作就开始了。