- 浏览: 100278 次
- 性别:
- 来自: 武汉
最新评论
-
hatedance:
这个bytecodeInterpreter应该已经被遗弃了,现 ...
openjdk中的同步代码 -
Mr_lee_2012:
是啊,好文章,谢过。
java栈帧中的对象引用 -
ZangXT:
有些性能要求比较高的系统会考虑这一点的,典型的如JPC,尽量避 ...
java中调用接口及调用继承类效率区别 -
tinywind:
你有没有注意到load_classfile开始定义了个Reso ...
hotsphot中的ResourceArea -
qianli-2010:
java中调用接口及调用继承类效率区别
文章列表
上次写了个《Thread的调用》过于简单,在这以javaThread的启动过程做一个详细分析。
先从java/lang/Thread.java看起
public synchronized void start() {
.....
start0(); // start0为 ...
InterpreterRuntime::_new为解释器查找常量池后,发觉需要resolve类时候调用。方法在interpreterRuntime.cpp里面。
void InterpreterRuntime::_new(JavaThread* thread, constantPoolOopDesc* pool, int index){
klassOop k_oop = pool->klass_at(index, CHECK);
/*上面pool->klass_at调用constantPoolOopDesc::klass ...
- 2008-09-05 14:52
- 浏览 1315
- 评论(0)
前面已经提到了java的方法入口是Interpreter::entry_for_method,此处就将cpu控制权交给了java的解释器。
上面的entry_for_method为这个AbstractInterpreterGenerator::generate_method_entry函数的返回值,在此还是以X86机器为例,普通的方法由Interpr ...
JavaCalls::call为hotspot调用java方法的实现之一。其调用os::os_exception_wrapper(call_helper, result, &method, args, THREAD);这个还是比较好看懂,通过传入call_helper函数指针,在call_helper上面封装了异常的处理,典型的回调函数用法。call_helper的实现里面的具体调用java函数的方法相对难看明白,下面进行进一步分析。
....
//函数的具体调用
{ JavaCallWrapper link(method, receiver, result, ...
instanceKlassHandle ClassFileParser::parseClassFile(symbolHandle name, Handle class_loader, Handle protection_domain, symbolHandle& parsed_ ...
- 2008-09-02 11:29
- 浏览 1929
- 评论(0)
hotspot中的OO对象,涉及到类的加载、gc等,相当复杂。
class oopDesc是基类。为Object header
class oopDesc { friend class VMStructs; private: volatile markOop _mark; union _metadata ...
- 2008-08-30 23:03
- 浏览 2146
- 评论(0)
类通过(*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。
先判断类是否存在dictionary()-&g ...
- 2008-08-20 16:00
- 浏览 1242
- 评论(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::start(native_thread)启动一个系统线程来执行用 ...
- 2008-08-19 11:03
- 浏览 2087
- 评论(0)
学习openJdk,主要是学习c++的面向对象思想,及开发大程序的思路。这段时间浏览了不少其中的代码,还是只能管中窥豹,没能从总体上领悟。在此想起曾在www.jdon.com上面看到有人大力鼓吹什么模式思维,宣扬什么数据库已 ...
openJdk文件数众多,在那先入手?我是从java.c开始,我采用的sourceInside阅读器,由于这是学习,本着能看懂多少是多少的态度,不必拘泥于各个细节,先从os/linux/laucher/java.c看起。
在java.c的main函数内调用LoadJavaVm,具体创建vm的函数为JNI_CreateJavaVM,其采用函数指针,而不采用直接调用,没看出来有什么好处,为什么多一个间接层?为了程序的可移植?在此先不管它。
JNI_CreateJavaVM函数内部创建虚拟机线程,由于程序考虑多系统的移植,故抽取了一个间接层Threads,在Threads.create_v ...