类通过(*env)->FindClass,也就是hotspot/src/share/vm/prims/jni.cpp的jni_FindClass来执行,在里面首先找到loader实例,之后进入find_class_from_class_loader,通过SystemDictionary::resolve_or_fail来解释类文件。在里面区分两种情况FieldType::is_array,是true调用resolve_array_class_or_null,否则调用resolve_instance_class_or_null。
&nbs ...
- 16:00
- 浏览 (9)
- 评论 (0)
在java里面创建线程new Thread().start(),在这里面先调用Thread.java的init()进行了初始化,然后调用了本地方法 start0(),这个方法实际上调用了hotspot\src\share\vm\prims\jvm.cpp文件里的JVM_StartThread方法。 在上面方法里new JavaThread(),这是jvm里面区分的线程类型。创建时候传进入一个函数指针thread_entry,这个函数将调用 用户实现的run()方法。在JVM_StartThread()最后通过Thread::s ...
- 11:03
- 浏览 (13)
- 评论 (0)
学习openJdk,主要是学习c++的面向对象思想,及开发大程序的思路。这段时间浏览了不少其中的代码,还是只能管中窥豹,没能从总体上领悟。在此想起曾在www.jdon.com上面看到有人大力鼓吹什么模式思维,宣扬什么数据库已死,算法什么不重要,大力排斥数据结构,感觉按他说的懂模式便懂了计算机。偶自认为略懂模式,模式只不过是软件公理(增加间接层解决问题)的招式提炼,用这么大力鼓吹吗?采用间接层解决问题的思路由来已久,在openjdk中模式也应用很多,但偶懂模式还是看不懂其总体思路,为何?偶的功力不够也,对计算机的底层、算法认识不足,没能领悟大师们的思路。不打 ...
- 11:05
- 浏览 (35)
- 评论 (0)
openJdk文件数众多,在那先入手?我是从java.c开始,我采用的sourceInside阅读器,由于这是学习,本着能看懂多少是多少的态度,不必拘泥于各个细节,先从os/linux/laucher/java.c看起。
在java.c的main函数内调用LoadJavaVm,具体创建vm的函数为JNI_CreateJavaVM,其采用函数指针,而不采用直接调用,没看出来有什么好处,为什么多一个间接层?为了程序的可移植?在此先不管它。
JNI_CreateJavaVM函数内部创建虚拟机线程,由于程序考虑多系统的移植,故抽取了一个间接层Threads ...
- 17:22
- 浏览 (26)
- 评论 (0)







评论排行榜