`
xieyj
  • 浏览: 100278 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论
文章列表
      上次写了个《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 ...
     前面已经提到了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_ ...
  hotspot中的OO对象,涉及到类的加载、gc等,相当复杂。   class oopDesc是基类。为Object header   class oopDesc {         friend class VMStructs;         private:               volatile markOop  _mark;               union _metadata ...
    类通过(*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 ...
    在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)启动一个系统线程来执行用 ...
    学习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 ...

开博随笔

 为记录学习openJdk的学习过程,在此开博  
Global site tag (gtag.js) - Google Analytics