Java|openjdk1.8中的Makefile

文章图片

文章图片

文章图片

文章图片

openJdk1.8中的makefile , 记录下java的执行文件编译过程及jvm编译过程 。
目录说明openjdk源码中有很多目录 , 根据功能做了模块化划分 , 每个目录实现其相应的功能 。 每个目录下的结构都差不多 , 分为src(源码)、make(makefile)、test(或没有)、其他特殊目录 。
Jdk目录
- langtools目录
Makefile目标生成可执行文件编译Makefile
文件名为:/openjdk/jdk/make/CompileLaunchers.gmkjava中提供的bin目录下的java、javac、javap等都不是完全通过c/c++编写实现的 , 是通过c/c++入口 , 启动虚拟机加载class文件实现的相关功能 。 通过c/c++的main函数入口 , 创建jvm虚拟机后 , 通过执行相关功能的java代码实现其功能 , 所以java相关的功能如编译、运行、查看jvm信息等功能都是通过启动一个jvm虚拟机或者通过jvmti等实现的 。
在makefile文件中可以查看到该部分定义 。
具体各个具体功能实现可以由makefile中找到相关的类文件查看实现 。 这些类在目录langtools目录中 。
在linux上编译openjdk的时候 , 所有java提供的工具程序(bin目录下的可执行程序)入口都是jdk/src/bin/share/bin/main.c 。 但是具体的功能代码实现其实是在langtools下通过java代码实现的 , 到底是怎么是怎么实现的呢 。
1、在jdk/src/share/bin/defines.h中通过宏开关实现了jvm虚拟机执行参数的定义 , 如下:
最终生成的elf程序常量区段会有程序名称及入口的class类名称 。
当使用javac编译java文件时 , 入口参数1为java文件路径 , 然后启动一个java虚拟机vm , 把com.sun.tools.javac.Main aaa.java传递给java虚拟机vm执行 , 传递给虚拟机参数如下:
- 2.1 jar包生成
openjdk提供了由运行时rt.jar 工具tools.jar , 编码charset.jar等其他功能jar 。
下面详细介绍几个重要的jar包是怎么生成的 。
tools.jar包
tools.jar包在jdk的lib目录下 , 主要提供jdk/bin目录下java工具的虚拟机里面的实现代码 , 由java开发 。 生成tools.jar包的makefile文件是:文件名为:/openjdk/jdk/make/CreateJars.gmk , 内容如下:
源码路径:langtools目录
【Java|openjdk1.8中的Makefile】rt.jar包
rt.jar包在jdk的lib目录下 , 主要提供java语言层面的运行时库 , 由java开发 。 rt.jar包含的文件范围由:/openjdk/jdk/make/profile-rtjar-includes.txt定义 , 内容如下:
生成tools.jar包的makefile文件是:文件名为:/openjdk/jdk/make/CreateJars.gmk , 内容如下:
jconsole.jar
jconsole.jar包在jdk的lib目录下 , 是一个Java监视和管理控制台的客户端程序 , 由javax swing开发 。 jsoncole可以附加本地java进程 , 通过api查询方式或者使用jms协议查询java虚拟机一些观测数据 。 jconsole.jar主要组成由jdk/src/share/classes/sun/tools/jconsole、jdk/src/share/classes/com/sun/tools/jconsole目录下文件组成 。
jdk本身提供了2中方式 , 一种是bin目录下的jconsole程序 , 另外一种就是lib下的jconsole.jar包 。 bin下的jsoncole直接运行 , 启动打开jconsole的main入口 ,lib下的jsoncole.jar需要使用java -jar jsoncole.jar运行 。
$(eval $(call SetupArchiveBUILD_JCONSOLE_JAR\\
SRCS := $(JDK_OUTPUTDIR)/classes \\ SUFFIXES := .class .gif .png .properties \\ INCLUDES := sun/tools/jconsole com/sun/tools/jconsole \\ JARMAIN := sun.tools.jconsole.JConsole \\ JAR := $(IMAGES_OUTPUTDIR)/lib/jconsole.jar \\ SKIP_METAINF := true))推荐阅读
- 神农架|“神农架”深处为何不让前往?其中的古怪现象,科学家至今没搞懂
- 这8道上海经典名菜,谁是你心中的NO.1?
- 物种|现实中的灭霸:危险入侵物种,可能潜伏在暗处
- 圆周率|宇宙中的圆周率与圆周率中的宇宙,圆周率——“数字中的神”
- 透明质酸|护肤品中的透明质酸到底有什么作用?
- 玉米面是一种新的吃法。当你用开水搅拌筷子时,你将吃不到其中的三个
- 腔隙性脑梗死|【提醒】腔隙性脑梗死诊疗中的9大雷区
- 面包中的“软妹子”,零添加,岂能不爱?
- 它是蔬菜中的“花青素之王”!营养是水果的10倍
- 东北|黑土地为何被称为耕地中的大熊猫
