JDK7 源代码札记 一

JDK7 源代码笔记 一
原来写了很多日志,但是都是在人人网,今天准备把这些都搬到iteye来,算是重新整理一下思路吧。

现在JIT很火,据说有的LUA jit的速度与C编译出的程序的速度是相当的,毕竟这方面做的比较早的比较有成果的还是jvm,网上搜了一下,系统分析JVM代码的资料是少的可怜,干脆,我就花点功夫去做个开拓者吧。以下所有分析基于最新jvm 的实现 jdk7的源代码,下载地址如下 http://download.java.net/openjdk/jdk7/  我所使用的源代码的版本是 openjdk-7 build143 。

一、hotspot 入口 openjdk-7-ea-src-b142-12_may_2011\openjdk\hotspot\src\share\tools\launcher\java.c
1、SelectVersion:选择版本,主要依据是宏定义,命令行输入和manifest文件
2、CreateExecutionEnvironment (java_md.c中)
   2.1 GetJREPath 可以参考windows里面的获取绝对路径的api GetModuleFileName和访问注册表的api        RegQueryValueEx等
   2.2 EnsureJreInstallation 验证硬件平台、ms 的crt、加载crt和jkernal.dll,调用jkernal.dll中的preJVMStart()
   2.3 ReadKnownVMs
3、LoadJavaVM
4、SetClassPath
5、ParseArguments
6、SetJavaCommandLineProp
7、setXXX
8、ContinueInNewThread ---------线程内的函数是 JavaMain
   8.1 _beginthreadex
   8.2 AWTPreload(D3D_PRELOAD_FUNC)
   8.3 WaitForSingleObject(thread_handle, INFINITE);
     GetExitCodeThread(thread_handle, &rslt);
     CloseHandle(thread_handle);

splash screen: 闪屏,程序初始化时为了提供好的界面所提前显示的界面

二、主要入口函数 JavaMain()
1、InitializeJVM
2、LoadMainClass
3、CallStaticVoidMethod

java.dll 对应 E:\jdk7\openjdk-7-ea-src-b142-12_may_2011\openjdk\jdk\src中的代码

注:本文写于 2011年5月份