openjdk 源码分析 v0.1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feivirus/article/details/83243439

第一节.hotspot调试helloworld

参考:

一.openjdk7:

https://blog.csdn.net/hcj116/article/details/54946551

https://blog.csdn.net/j754379117/article/details/53695426

https://www.jianshu.com/p/e53e7964db03

http://www.txazo.com/jvm/openjdk-compile.html

https://super2bai.github.io/JVM/build.html

https://www.jianshu.com/p/5107fc72558f

http://www.cnblogs.com/zyx1314/p/5638596.html

https://stackoverflow.com/questions/6000554/clang-complete-where-is-the-libclang-so-dylib-in-os-xhttps://liuzhengyang.github.io/2017/04/28/buildopenjdk/

sudo ln -s /Users/feivirus/Documents/software/apache-ant-1.8.2/bin/ant  /usr/bin

sudo ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libclang.dylib /usr/local/lib/

二.openjdk8:

https://blog.csdn.net/manageer/article/details/72812149

三.openjdk9:

https://juejin.im/post/5a6d7d106fb9a01ca47abd8b

https://segmentfault.com/a/1190000005082098

https://www.gonwan.com/2017/12/01/building-debugging-openjdk8-from-source-on-macos-high-sierra/

https://www.zhihu.com/question/52169710

process handle SIGSEGV --stop=false

https://medium.com/@maxraskin/background-1b4b6a9c65be

add-dsym /Users/feivirus/Documents/project/eclipse/jdk9/build/macosx-x86_64-normal-server-slowdebug/support/modules_libs/java.base/server/libjvm.dylib.dSYM

https://apple.stackexchange.com/questions/309017/unknown-error-2-147-414-007-on-creating-certificate-with-certificate-assist

第二节.openjdk源码模块

 主要内容: 类二分模型,类加载,堆栈结构,解释器的模板表与转发表,编译器,函数分发指令集.

一.hotspot源码结构

(一)vm根目录下:
 1.Adlc:平台描述文件(cpu或os_cpu目录中的.ad文件)的编译器
 2.asm:汇编器
 3.c1 Client编译器
 4.ci 动态编译器的公共服务(从动态编译器到VM的接口)
 5.classfile 处理类文件(包括类加载和系统符号表等)
 6.code 管理动态生成的代码
 7.compiler 从VM调用动态编译器的接口
 8.gc_implementation GC实现
 9.gc_interface GC接口
 10.interpreter 解释器,包括模板解释器(官方版使用)和C++解释器(官方版未用)
 11.libadt:抽象数据结构
 12.memory 内存管理相关实现(老的分代式 GC 框架也位于此处)
 13.oops HotSpot VM的对象系统的实现
 14.opto Server编译器(即C2)
 15.prims HotSpot VM的对外接口,包括部分标准库的native部分实现和JVMTI实现
 16.rumtime 运行时支持库(包括线程管理、编译器调度、锁、反射等)
 17.services 用于支持JMX之类的管理功能的接口
 18.shark 基于LLVM的JIT编译器(官方版未用)
 19.utilities 一些基本工具类

(二).prims对外接口模块

主要包括jni,perf,jvm,jvmti四个模块.

1.jni模块(java native interface,允许java代码与本地代码交互,以 jni_前缀)

jni知识参考 https://blog.csdn.net/column/details/blogjnindk.html

2.jvm模块(对jni的补充,以jvm_前缀)

涉及jvm.h文件等.主要包含导出函数,比如访问jvm状态,字节码和class文件格式校验,各种IO和网络操作.

3.jvmti模块

监控和调优java程序

4.perf模块

以perf_为前缀,监控虚拟机.

(三).services模块

通过jmx监控和管理java应用。jmx参考https://www.cnblogs.com/dongguacai/p/5900507.html

分为Management,MemoryService,ThreadService,RuntimeService,MemoryManager,HeapDumper,ClassLoadingService,MemoryPool,AttachListener九个子模块.

(四)Runtime模块

分为Thread(线程队列),Arguments(vm参数解析),StubRoutines/StubCodeGenerator(Stub例程),Frame栈帧(frame.hpp),CompilationPolicy(编译策略),Init(系统初始化),VmThread模块(全局单例线程,维护操作队列VmOperationQueue,执行GC,对外提供监控), VMOperation(比如ThreadStop,FindDeadlocks,ForceSafepoint,ParallelGCSystemGC等),互斥锁,安全点,PerfData,,反射,

二.虚拟机启动


(一)虚拟机的生命周期
启动器分为通用启动器(Generic Launcher)和调试版启动器(gamma)两种.
通用启动器就是java和javaw,区别是javaw没有控制台窗口.gamma启动器入口位于hotspot/src/share/tools/luncher/java.c中.通用启动器入口在jdk/src/share/bin/main.c中(jdk9改在jdk/src/java.base/share/native/launcher下).
jdk/src/share/bin/main.c的main()->jdk/src/share/bin/java.c的JLI_Launch()->jdk/src/solaris/bin/java_md_solinux.c的JVMInit()新建线程调用JavaMain()->jdk/src/share/bin/java.c的JavaMain()(jvm启动核心操作)在该方法中依次调用InitializeJVM()初始化jvm(此方法进入hotspot/src/share/vm/prims/jni.cpp的JNI_CreateJavaVM()中->hotspot/src/share/vm/runtime/thread.cpp中的Threads::create_vm()->hotspot/src/share/vm/runtime/vmThread.cpp的VMThread::create()),调用LoadMainClass()加载主类,调用GetStaticMethodID()获取main方法的id号,调用CreateApplicationArgs()创建java的main方法的参数,调用CallStaticVoidMethod()进入java的main方法->javac中的DetachCurrentThread()->javac中的DestroyJavaVM()

启动过程的堆栈如下图

jvm启动

进入java代码的main()方法前的堆栈如下图:

jvm调用

其中StubRoutines::call_stub()是个函数指针,指向被调用的java的main函数地址.
(二)过程分析


第三节.性能监控分析,
第四节.集合(红黑树),
第五节.垃圾回收算法,
第六节.多线程,同步与可见性,内存模型(重排序).
第七节.IO/NIO/AIO,reactor/proactor

猜你喜欢

转载自blog.csdn.net/feivirus/article/details/83243439