`
chenjingbo
  • 浏览: 460649 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

在eclipse中调试hotspot

 
阅读更多

前言

        相信很多人在阅读源码的时候,都会习惯的去调试对应的代码以加深理解。阅读hotspot的源码也不例外。听说很多大牛都是直接用gdb来调试的,但是大部分的程序员还是习惯在IDE下进行调试,包括我在内。然后就捣鼓了一个下午,在eclipse CDT下调试hotspot成功,特此记录吧。

 

        ps

        1 下面所有的内容,都是基于你已经自己编译openjdk成功的基础上的,如果还没完成这一步,请参考 

自己编译JDK的时候遇到的问题记录 这篇文章先自己编译JDK。

  

        2 其实对于C C++程序员 来说,gdb是非常常用的调试工具。这里也顺便提一句如何使用gdb来调试。我编译的虚拟机的目标地址在 

写道
/home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/linux_amd64_compiler2/jvmg

 这也间接说明我的编译级别是jvmg.在这个目录下,有一个hotspot 脚本。直接运行,可以替代很多重复性的输入工作,具体如下

[zhenghui@localhost jvmg]$ ./hotspot -gdb Queens
GNU gdb (GDB) Fedora 7.7.1-13.fc20
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
Breakpoint 1 at 0x40431d: file /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/src/share/tools/launcher/java.c, line 1270.
Missing separate debuginfo for /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/linux_amd64_compiler2/jvmg/libjvm.so
Try: yum --enablerepo='*debug*' install /usr/lib/debug/.build-id/d6/a890fc719cc82de2a2c53a1dbd1a53f6d3f46b.debug
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Using java runtime at: /home/zhenghui/software/jdk7/jdk1.7.0_25/jre
[New Thread 0x7ffff7fdc700 (LWP 8156)]
[Switching to Thread 0x7ffff7fdc700 (LWP 8156)]

Breakpoint 1, InitializeJVM (pvm=0x7ffff7fdbe38, penv=0x7ffff7fdbe30, 
    ifn=0x7ffff7fdbe40)
    at /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/src/share/tools/launcher/java.c:1270
1270	    memset(&args, 0, sizeof(args));
Missing separate debuginfos, use: debuginfo-install glibc-2.18-12.fc20.x86_64
(gdb) info args 
pvm = 0x7ffff7fdbe38
penv = 0x7ffff7fdbe30
ifn = 0x7ffff7fdbe40
(gdb) info locals 
args = {version = -169313992, nOptions = 32767, options = 0x7ffff7fe0000, 
  ignoreUnrecognized = 0 '\000'}
r = 0
(gdb) list
1265	InitializeJVM(JavaVM **pvm, JNIEnv **penv, InvocationFunctions *ifn)
1266	{
1267	    JavaVMInitArgs args;
1268	    jint r;
1269	
1270	    memset(&args, 0, sizeof(args));
1271	    args.version  = JNI_VERSION_1_2;
1272	    args.nOptions = numOptions;
1273	    args.options  = options;
1274	    args.ignoreUnrecognized = JNI_FALSE;

 

正文

1 下载eclipse CDT

      下载的链接是 http://www.eclipse.org/cdt/downloads.php 。这个没什么好说的,就是eclipse 支持 C C++的版本。

2 把项目导入eclipse

file->new->Makefile Project with Existing Code  对应的project name 可以自定义,对应的Existing Code location 选择openjdk目录下的hotspot目录,然后点击finish



 

3 设置build commond 和build location

项目右键-》properites ->C C++ Build 需要设置的值有两个, 

1 把use default build commond 的勾去掉,在Buid Commond下输入

make -f Makefile clean jvmg ALT_BOOTDIR=/home/zhenghui/software/jdk7/jdk1.7.0_25 ARCH_DATA_MODEL=64 LANG=C

 注意,ALT_BOOTDIR的地址是你在oracle下下载的已经编译好的jdk目录, 如果你的机器是64位的,加上ARCH_DATA_MODEL=64

2 把Build Location的地址改成 ${workspace_loc:/hotspot}/make 。eclipse会自动去找${workspace_loc:/hotspot}/make下的Makefile文件作为build的构建文件

 

在这步为止,你可以直接build project了。顺利的话,你可以在大概30~40min以后build完成,并看到让人激动人心的

make[3]: Leaving directory `/home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/linux_amd64_compiler2/fastdebug'
cd linux_amd64_compiler2/fastdebug && ./test_gamma
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
OpenJDK 64-Bit Server VM (build 24.0-b56-internal-fastdebug, mixed mode)

 1. A1 B5 C8 D6 E3 F7 G2 H4 
 2. A1 B6 C8 D3 E7 F4 G2 H5 
 3. A1 B7 C4 D6 E8 F2 G5 H3 
 4. A1 B7 C5 D8 E2 F4 G6 H3 
 5. A2 B4 C6 D8 E3 F1 G7 H5 
 6. A2 B5 C7 D1 E3 F8 G6 H4 
 7. A2 B5 C7 D4 E1 F8 G6 H3 
 8. A2 B6 C1 D7 E4 F8 G3 H5 
 9. A2 B6 C8 D3 E1 F4 G7 H5 
10. A2 B7 C3 D6 E8 F5 G1 H4 
11. A2 B7 C5 D8 E1 F4 G6 H3 
12. A2 B8 C6 D1 E3 F5 G7 H4 
13. A3 B1 C7 D5 E8 F2 G4 H6 
14. A3 B5 C2 D8 E1 F7 G4 H6 
15. A3 B5 C2 D8 E6 F4 G7 H1 
16. A3 B5 C7 D1 E4 F2 G8 H6 
17. A3 B5 C8 D4 E1 F7 G2 H6 
18. A3 B6 C2 D5 E8 F1 G7 H4 
19. A3 B6 C2 D7 E1 F4 G8 H5 
20. A3 B6 C2 D7 E5 F1 G8 H4 
21. A3 B6 C4 D1 E8 F5 G7 H2 
22. A3 B6 C4 D2 E8 F5 G7 H1 
23. A3 B6 C8 D1 E4 F7 G5 H2 
24. A3 B6 C8 D1 E5 F7 G2 H4 
25. A3 B6 C8 D2 E4 F1 G7 H5 
26. A3 B7 C2 D8 E5 F1 G4 H6 
27. A3 B7 C2 D8 E6 F4 G1 H5 
28. A3 B8 C4 D7 E1 F6 G2 H5 
29. A4 B1 C5 D8 E2 F7 G3 H6 
30. A4 B1 C5 D8 E6 F3 G7 H2 
31. A4 B2 C5 D8 E6 F1 G3 H7 
32. A4 B2 C7 D3 E6 F8 G1 H5 
33. A4 B2 C7 D3 E6 F8 G5 H1 
34. A4 B2 C7 D5 E1 F8 G6 H3 
35. A4 B2 C8 D5 E7 F1 G3 H6 
36. A4 B2 C8 D6 E1 F3 G5 H7 
37. A4 B6 C1 D5 E2 F8 G3 H7 
38. A4 B6 C8 D2 E7 F1 G3 H5 
39. A4 B6 C8 D3 E1 F7 G5 H2 
40. A4 B7 C1 D8 E5 F2 G6 H3 
41. A4 B7 C3 D8 E2 F5 G1 H6 
42. A4 B7 C5 D2 E6 F1 G3 H8 
43. A4 B7 C5 D3 E1 F6 G8 H2 
44. A4 B8 C1 D3 E6 F2 G7 H5 
45. A4 B8 C1 D5 E7 F2 G6 H3 
46. A4 B8 C5 D3 E1 F7 G2 H6 
47. A5 B1 C4 D6 E8 F2 G7 H3 
48. A5 B1 C8 D4 E2 F7 G3 H6 
49. A5 B1 C8 D6 E3 F7 G2 H4 
50. A5 B2 C4 D6 E8 F3 G1 H7 
51. A5 B2 C4 D7 E3 F8 G6 H1 
52. A5 B2 C6 D1 E7 F4 G8 H3 
53. A5 B2 C8 D1 E4 F7 G3 H6 
54. A5 B3 C1 D6 E8 F2 G4 H7 
55. A5 B3 C1 D7 E2 F8 G6 H4 
56. A5 B3 C8 D4 E7 F1 G6 H2 
57. A5 B7 C1 D3 E8 F6 G4 H2 
58. A5 B7 C1 D4 E2 F8 G6 H3 
59. A5 B7 C2 D4 E8 F1 G3 H6 
60. A5 B7 C2 D6 E3 F1 G4 H8 
61. A5 B7 C2 D6 E3 F1 G8 H4 
62. A5 B7 C4 D1 E3 F8 G6 H2 
63. A5 B8 C4 D1 E3 F6 G2 H7 
64. A5 B8 C4 D1 E7 F2 G6 H3 
65. A6 B1 C5 D2 E8 F3 G7 H4 
66. A6 B2 C7 D1 E3 F5 G8 H4 
67. A6 B2 C7 D1 E4 F8 G5 H3 
68. A6 B3 C1 D7 E5 F8 G2 H4 
69. A6 B3 C1 D8 E4 F2 G7 H5 
70. A6 B3 C1 D8 E5 F2 G4 H7 
71. A6 B3 C5 D7 E1 F4 G2 H8 
72. A6 B3 C5 D8 E1 F4 G2 H7 
73. A6 B3 C7 D2 E4 F8 G1 H5 
74. A6 B3 C7 D2 E8 F5 G1 H4 
75. A6 B3 C7 D4 E1 F8 G2 H5 
76. A6 B4 C1 D5 E8 F2 G7 H3 
77. A6 B4 C2 D8 E5 F7 G1 H3 
78. A6 B4 C7 D1 E3 F5 G2 H8 
79. A6 B4 C7 D1 E8 F2 G5 H3 
80. A6 B8 C2 D4 E1 F7 G5 H3 
81. A7 B1 C3 D8 E6 F4 G2 H5 
82. A7 B2 C4 D1 E8 F5 G3 H6 
83. A7 B2 C6 D3 E1 F4 G8 H5 
84. A7 B3 C1 D6 E8 F5 G2 H4 
85. A7 B3 C8 D2 E5 F1 G6 H4 
86. A7 B4 C2 D5 E8 F1 G3 H6 
87. A7 B4 C2 D8 E6 F1 G3 H5 
88. A7 B5 C3 D1 E6 F8 G2 H4 
89. A8 B2 C4 D1 E7 F5 G3 H6 
90. A8 B2 C5 D3 E1 F7 G4 H6 
91. A8 B3 C1 D6 E2 F5 G7 H4 
92. A8 B4 C1 D3 E6 F2 G7 H5 
Using java runtime at: /home/zhenghui/software/jdk7/jdk1.7.0_25/jre
make[2]: Leaving directory `/home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux'
make[1]: Leaving directory `/home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/make'
cd /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/make; \
make BUILD_FLAVOR=fastdebug VM_TARGET=fastdebug1 generic_build1 
INFO: ENABLE_FULL_DEBUG_SYMBOLS=1
INFO: /usr/bin/objcopy cmd found so will create .debuginfo files.
INFO: STRIP_POLICY=min_strip
INFO: ZIP_DEBUGINFO_FILES=1
make[1]: Entering directory `/home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/make'
mkdir -p /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux
No compiler1 (fastdebug1) for ARCH_DATA_MODEL=64
make[1]: Leaving directory `/home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/make'
make BUILD_FLAVOR=fastdebug VM_SUBDIR=fastdebug \
  EXPORT_SUBDIR=/fastdebug \
  generic_export
INFO: ENABLE_FULL_DEBUG_SYMBOLS=1
INFO: /usr/bin/objcopy cmd found so will create .debuginfo files.
INFO: STRIP_POLICY=min_strip
INFO: ZIP_DEBUGINFO_FILES=1
make[1]: Entering directory `/home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/make'
cp /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/linux_amd64_docs/jvmti.html /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/docs/platform/jvmti/jvmti.html
cp /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/linux_amd64_compiler2/fastdebug/libjsig.so /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/jre/lib/amd64/libjsig.so
cp /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/linux_amd64_compiler2/fastdebug/libjsig.diz /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/jre/lib/amd64/libjsig.diz
rm -f /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/jre/lib/amd64/server/Xusage.txt.temp
sed 's/\(separated by \)[;:]/\1:/g' /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/src/share/vm/Xusage.txt > /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/jre/lib/amd64/server/Xusage.txt.temp
mv /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/jre/lib/amd64/server/Xusage.txt.temp /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/jre/lib/amd64/server/Xusage.txt
cp /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/linux_amd64_compiler2/fastdebug/libjvm.so /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/jre/lib/amd64/server/libjvm.so
cp /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/linux_amd64_compiler2/fastdebug/libjvm.diz /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/jre/lib/amd64/server/libjvm.diz
cp /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/linux_amd64_compiler2/fastdebug/libsaproc.so /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/jre/lib/amd64/libsaproc.so
cp /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/linux_amd64_compiler2/generated/sa-jdi.jar /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/lib/sa-jdi.jar
cp /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/linux_amd64_compiler2/fastdebug/libsaproc.diz /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/jre/lib/amd64/libsaproc.diz
cp /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/linux_amd64_compiler2/generated/jvmtifiles/jvmti.h /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/include/jvmti.h
cp /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/src/share/vm/code/jvmticmlr.h /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/include/jvmticmlr.h
cp /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/src/share/vm/prims/jni.h /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/include/jni.h
cp /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/src/cpu/x86/vm/jni_x86.h /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/include/linux/jni_md.h
cp /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/src/share/vm/services/jmm.h /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/export-linux-amd64/fastdebug/include/jmm.h
make[1]: Leaving directory `/home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/make'

20:51:06 Build Finished (took 29m:44s.877ms)

 这说明在eclipse编译hotspot是成功了。下面,继续说如果配置调试。我们还是以openjdk中自带的N皇后问题的java代码(这个无所谓,自己写一个HelloWorld也是可以的)为例子。

 

 

4 新建application 

Debug Configurations ->新建一个C C++ Application -》main-》C C++ Applications 输入 /home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/linux_amd64_compiler2/jvmg/gamma 。project 选择当前工程



 配置Arguments 就是刚才说的Queens 



 设置Environment 新增两个环境变量分别是

写道
JAVA_HOME=/home/zhenghui/software/jdk7/jdk1.7.0_25
CLASSPATH=.:/home/zhenghui/software/openjdk_eclipse/openjdk/hotspot/build/linux/linux_amd64_compiler2/jvmg

 在CLASSPATH里加上jvmg目录是因为我们运行的测试类(Queens)在该目录下。

 

到这里为止,所有的设置都OK了。在java.c中main方法第一行设置一个断点,直接debug。看效果



 

bingo!

  • 大小: 44.9 KB
  • 大小: 91.4 KB
  • 大小: 54.6 KB
  • 大小: 121.1 KB
分享到:
评论

相关推荐

    JAVAECLIPSE下配置WINDCHILL远程调试WINDCHILL学习笔记.pdf

    通过上述步骤,您可以在 Eclipse 中成功配置 Windchill 进行远程调试。远程调试不仅可以提高开发效率,还能帮助开发者更好地理解分布式系统的运行机制。理解 JPDA 的架构和工作原理对于进行高效的远程调试至关重要。...

    eclipse远程debug

    eclipse 远程 debug tomcat 和 websphere 的 web...首先,我们需要在 tomcat 中启用 JPDA 调试模式,然后在 eclipse 中配置远程 debug 设置。最后,我们可以使用 eclipse 远程 debug tomcat 和 websphere 的 web 应用。

    Eclipse 的启动参数

    这些参数在 Eclipse 的启动过程中扮演着重要的角色。 JVM 参数 * `-vmargs`:用于设置 JVM 的参数,例如堆栈大小、垃圾回收器等。 * `-vm`:指定 JVM 的类型,例如 Java HotSpot(TM) 64-Bit Server VM。 Eclipse ...

    Linux下安装Eclipse/JRE/CDT开发C/C++

    在Eclipse中,可以创建一个新的C++项目,编写代码,然后通过Eclipse内置的构建系统(通常使用Makefile)进行编译。调试时,可以设置断点,单步执行,查看变量值,进行内存分析等,使得调试过程更加直观和高效。 ...

    Eclipse开发环境搭建

    在Eclipse中配置JRE(Java Runtime Environment),确保与JDK版本一致。 - 打开Eclipse,依次点击`Window` &gt; `Preferences`。 - 在弹出的对话框中,选择`Java` &gt; `Installed JREs`。 - 添加已安装的JDK路径。 ####...

    JAVA远程调试.txt

    在开发过程中,特别是在分布式系统或微服务架构中,远程调试成为解决复杂问题的关键技术之一。本文将详细介绍如何通过JAVA进行远程调试,包括配置环境、启动调试服务器以及连接远程调试客户端等步骤。 #### 一、...

    原创-tomcat快速开发调试-类修改热部署

    3. 在Eclipse中配置JREs,确保选用的是JDK 1.5,并添加JVM参数:-Xms512M -Xmx1024M -XX:PermSize=256M -XX:MaxPermSize=512M,以优化内存使用。 4. 确保Tomcat 5.5使用的是DCE VM增强的JDK 1.6。 5. 设置Tomcat启动...

    openjdk-8u342-b07-windows-x64

    让我们深入了解一下OpenJDK 8u342-b07在Windows系统中的关键知识点: 1. **Java 8**: Java 8是Java平台的重大更新,引入了Lambda表达式、函数式编程接口、默认方法、DateTime API、Stream API等新特性,增强了语言...

    通过HSDB来了解String值的真身在哪里1

    标题中的“通过HSDB来了解String值的真身在哪里1”指的是使用HSDB(HotSpot Serviceability Debugger)工具来探究Java程序中String对象的具体存储位置,特别是关注String的值(字符数组value)在内存的不同区域如何...

    Delphi调用Java类和包源代码

    本篇文章将详细探讨如何在Delphi中调用Java类和包源代码,以实现两者之间的无缝连接。 首先,理解Delphi和Java的互操作性基础。Java是一种跨平台的编程语言,其运行在Java虚拟机(JVM)上,而Delphi则基于Windows...

    云栖专家带你技术进阶之理解Java内存管理机制.pdf

    在HotSpot JVM中,内存管理机制中有一项关键的技术是分代垃圾回收。分代垃圾回收将堆分为新生代(Young Generation)、老年代(Old Generation)以及永久代(PermGen,Java 8后被元空间Metaspace取代)。 在文档中...

    eclipsejava源码添加-helloJava:测试:这是EclipseOpenJ9的主要源代码回购,EclipseOpenJ9是一个Ja

    标题中的“eclipsejava源码添加-helloJava”指的是在Eclipse集成开发环境中,将一个名为"helloJava"的Java源代码项目导入的过程。Eclipse是一款广泛使用的Java开发工具,它支持各种编程语言,但在这里特别提到了Java...

    Java十大产品.docx

    Eclipse以其开放的架构和强大的插件系统著名,允许开发者使用多种语言进行开发,并提供丰富的工具集进行代码编辑、调试和构建。Eclipse的厂商会员制度和开放源码模式使其成为对抗微软Visual Studio的重要力量。 3. ...

    java源码构建-JavaSourceLearn:JDK8源码构建,调试

    在IDE如IntelliJ IDEA或Eclipse中,可以导入OpenJDK的源码项目,并将其关联到你的JDK安装。这样,当你在调试代码时,IDE将能够跳转到源码中,使你能查看和修改内部的实现。 了解源码结构也是很重要的。JDK8的源码...

    Sanity-s-Eclipse:二维空间游戏

    2. **性能优化**:虽然Java在早期被认为不适合游戏开发,但随着JVM(Java虚拟机)的不断优化,尤其是Java HotSpot技术的引入,Java的运行速度已经显著提升,能够处理复杂的计算和图形处理。 3. **丰富的库支持**:...

    openjdk-15.0.2_windows-x64_bin.zip

    4. **Java语言规范**:OpenJDK 15.0.2支持Java语言的最新特性,包括在Java 15中引入的特性,如Records(一种简化创建不可变数据类的方式)和Pattern Matching for instanceof(增强类型检查的能力)。 5. **开发...

    jdk源码-补充缺少sun包下的源码

    这些类通常不推荐在应用程序中直接使用,因为它们可能在不同的JDK版本中发生变化,甚至被移除。然而,对于理解和调试JDK内部机制,研究sun包下的源码是不可或缺的。 二、获取与补充sun包源码 补充缺失的sun包源码...

Global site tag (gtag.js) - Google Analytics