`
李静波
  • 浏览: 53810 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论
文章列表
阅读JVM代码的方法之一就是写一个JNI程序,然后单步跟踪代码。   一、编译出jvm.dll的debug版本。    在我的机器上我用了这个编译命令:build debug compiler1 D:\temp\hotspot C:\Java\jdk1.7.0    编译的详细方法,可以参考这里。   二、假设jre安装在:C:\Java\jre1.7.0,那么在C:\Java\jre1.7.0\bin下新建一个目录,目录名称自己定,    例如我就给它叫做:MyJVM。把debug版的jvm.dll复制到:C:\Java\jre1.7.0\bin\MyJVM      这一步是因为在默认情况下 ...
oop是ordinary object pointer的缩写。 hotspot\src\share\vm\oops下的文件描述和了Java Class在JVM中的内部数据结构。
VC++2005编译器和Lib相对VC++2003做了不少改动,因此编译JVM代码的时候需要作一些修改。 先读这个。  一、hotspot\build\windows\makefiles\compile.make     Line51:CPP_FLAGS=/nologo /W3 /WX     改  为:CPP_FLAGS=/nologo /W3 /WX /D "_CRT_SECURE_NO_DEPRECATE=1" /D "_CRT_NONSTDC_NO_DEPRECATE=1"       即增加_CRT_SECURE_NO_DEPRECATE 和 ...
这里的JVM是指Sun以GPL开源的Hotspot JVM   在Sun提供的编译文档中说明需要使用MKS工具。现在MKS工具几乎无法搞到,于是我使用cygwin来替代。   编译步骤: 一、安装cygwin。假设cygwin安装在c:\cygwin。那么把c:\cygwin\bin加入环境变量PATH中。         注:使用cygwin/MKS也主要使为了使用sh、cat、cp等Unix命令行工具。   二、打开VS2003命令行。(我使用VS2005编译没有成功,原因还没有去细查)   三、进入 \hotspot\build\windows 文件夹。         在我的电脑上是:  ...
JNI_CreateJavaVM位于jni.cpp中。 很显然JNI_CreateJavaVM也只是一个Wrapper,它调用了Threads::create_vm 其中有意思的代码是:   result = Threads::create_vm((JavaVMInitArgs*) args, &can_try_again);   if (result == JNI_OK) {     JavaThread *thread = JavaThread::current();     /* thread is thread_in_vm here */     *vm = (JavaVM *) ...
这么多行的代码从哪里看呢?我想到了Java.exe。 在目前发布的代码中Java.exe的代码还没有被以GPL的协议OpenSource。 只好先借助原来发布的代码来阅读Java.exe的实现了。   我用这个 \jdk-1_5_0-src-scsl\j2se\src\windows\bin 来阅读了Java.exe的代码。   Java.exe的实现使用了JNI。也就是说JVM对外暴露的唯一接口就是JNI,即使是Java.exe也没有例外。   \hotspot\src\share\vm\prims 下面应该是JNI的主要代码   在C++中通过JNI创建JVM的第一步是调用JNI_Creat ...
为了记录下学习JVM源代码的点点滴滴,在JavaEye开博。
Global site tag (gtag.js) - Google Analytics