java makefile_openjdk1.8中的Makefile

openJdk1.8中的makefile,记录下java的执行文件编译过程及jvm编译过程。

目录说明

openjdk源码中有很多目录,根据功能做了模块化划分,每个目录实现其相应的功能。每个目录下的结构都差不多,分为src(源码)、make(makefile)、test(或没有)、其他特殊目录。Jdk目录langtools目录

该目录主要实现了jdk提供的基于jvm的工具,比如:java, javac, javah, javap等。

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包生成

jdk编译后会生成很多jar包,除了jvm虚拟机提供的一些平台功能外,其他语言层面的功能都是由java开发的jar包对外提供的,所以现在有很多语言都基于jvm做了实现。

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目录

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 SetupArchive,BUILD_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))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值