博客主页:进入博客
作者简介:从业2.5年的全栈工程师,分享关于Java、数据库、设计模式等后端内容,偶尔分享前端知识
本文介绍了为什么要阅读jdk源码,jdk文件夹中目录结构及其作用,Java程序能够运行的原理
目录
1.bin文件夹:jdk中包含各种Java开发工具的二进制文件所在的文件夹。重要工具有:
2.lib文件夹:这个文件夹包含了jdk所需的库文件,一些重要的jar包括:
3.jre文件夹:JRE(Java运行时环境)包含Java运行时环境 ,用于执行Java程序。JRE包括一些子文件夹和文件,如:
4.include文件夹:这个文件夹包含了用于本地开发的头文件,用于在本地编写和编译与Java Native Interface(JNI)相关的代码,以便在Java和本地代码之间进行交互。
5.src.zip文件:这个文件包含了Java标准库的源代码,可以用于查看标准库的实现细节。
一、为什么要阅读源码?
当你做项目时,你要使用列表,使用ArrayList还是LinkedList?当要求线程安全时,你又是否了解线程安全的集合类?多线程中,面对如此多的队列类型,不了解它们的前提下,选择哪一个呢?作为一个Javaer,不熟悉自己手中的工具如何得行?
当你面试时,对面穿着格子衬衫圆顶的25岁小伙问你,HashMap的底层原理是什么?你多少有点尴尬吧?
通过学习Jdk源码,我们不单单能深入了解Java的各种工具类,还能学习到源码中蕴含的各种设计模式,学习jdk的代码设计。
好,决定要学了,我猜现在马上便在搜索引擎输入“jdk源码下载”,咔咔一顿安装网上五花八门的教材去下载源码,导入到你的eclipse或者idea里面去,咔咔开始看起了源码。这样的做法是能够顺利搭出来一个阅读环境,但后面可能会面临一些其他麻烦。
既然是看的jdk——Java开发者工具源码,我们先了解jdk文件夹的结构、作用以及其工作原理。
二、jdk目录结构和作用
![jdk1.8的目录](https://i-blog.csdnimg.cn/blog_migrate/6f9cb88e3f1845ce395fc53b5eedf465.png)
1.bin文件夹:jdk中包含各种Java开发工具的二进制文件所在的文件夹。重要工具有:
- javac:Java编译器,用于将Java源代码编译成字节码文件。
- java :Java运行时环境,执行已编译的Java字节码文件
- javap:Java反编译工具,用于查看字节码文件的内容
- javadoc:用于生成Java文档的工具
2.lib文件夹:这个文件夹包含了jdk所需的库文件,一些重要的jar包括:
- rt.jar:Java标准库的运行时部分,包含Java核心类和API
- tools.jar:包含一些开发工具类,例如javac编译器的实现,也就说明javac依赖于tools.jar
3.jre文件夹:JRE(Java运行时环境)包含Java运行时环境 ,用于执行Java程序。JRE包括一些子文件夹和文件,如:
- lib文件夹:包含JRE运行时所需的库文件,包括各种支持的类和JAR包
- bin文件夹:包含了JRE运行时使用的可执行文件,如java命令
注意:lib文件夹中的endorsed文件夹,这个目录允许我们一些特殊的类库放到其中供项目使用,并且项目运行时会优先使用这些jar包。此文件夹在Java9已被弃用。
4.include文件夹:这个文件夹包含了用于本地开发的头文件,用于在本地编写和编译与Java Native Interface(JNI)相关的代码,以便在Java和本地代码之间进行交互。
5.src.zip文件:这个文件包含了Java标准库的源代码,可以用于查看标准库的实现细节。
三、Java程序是如何跑起来的?
众所周知,Java是跨平台的语言,之所以跨平台还是依靠其运行机制。Java源码需要跑起来,先通过编译器编译成字节码文件,该字节码文件在jvm(Java虚拟机)执行。JVM需要JRE来运行程序,后者包括前者。
java文件 ——(编译器)——>class文件——(jre,jvm)——程序启动
其中jre中含有rt.jar等jar包,而rt.jar包其实就是jdk源码编译打包而来。程序依赖于jre环境,jre中jar包是Java源码编译而来。
四、阅读jdk源码做法
- 找到我们本地的jdk安装路径,找到其中src包并解压
- IDE中新建项目,将解压出来的文件复制到项目中(此事便可阅读并修改源码)
- 编译上述项目,并将编译后文件复制到endorsed文件夹中(覆盖jre中相同java源文件编译后文件,在该jre运行的程序优先选择此jar包)
- IDE中Debug Configurations配置source为上述项目,打断点会关联java源文件,如图所示
![Debug Configurations](https://i-blog.csdnimg.cn/blog_migrate/1f6d7939201da052f3b1e8f75c3d4cfa.png)
好的,现在我们就可以在IDE中阅读jdk源码,并且让编译后的jar在系统中的jre中生效并被优先选择,经过配置调试程序也会走源代码中的.java文件(而不是.class文件)。
但请注意,开发项目时请删除endorsed文件夹内jar包,避免污染开发环境。
本文仅介绍了我们为什么要阅读jdk源码、jdk目录结构和浅谈了程序运行的原理。
后续作者将详细介绍jdk阅读环境的搭建,重要工具类的介绍。