Adopt Open JDK官方文档(十)

编译过程性能优化的命令行参数

AdoptOpenJDK wiki的一个链接,提供了几个怎么提高编译过程性能的例子。

编译 jcov

项目首页(项目信息, 编译指南, 其他…)

https://wiki.openjdk.java.net/display/CodeTools/jcov

源代码:

http://hg.openjdk.java.net/code-tools/jcov

Adopt OpenJDK持续集成网站下载。

 

快速编译指南

$ hg clone http://hg.openjdk.java.net/code-tools/jcov
$ cd jcov/build
$ ant clean
$ ant -v -f build.xml -Dasmjar5=/path/to/asm-all-5.0.1.jar -Djavatestjar=/path/to/javatest.jar

当项目主页有编译指南时,请参考项目主页,同时上面的编译编译指导会被删掉,避免重复。

请参考OpenJDK代码覆盖率.

编译 sigtest

项目主页(项目信息, 编译指南, 其他…)

https://wiki.openjdk.java.net/display/CodeTools/sigtest

源代码:

http://hg.openjdk.java.net/code-tools/sigtest

快速编译指南

$ svn checkout https://svn.java.net/svn/sigtest~svn/trunk
$ cd code/build
$ ant build -Djdk5.home=/path/to/jdk1.5.latest \
-Djdk8.home=/path/to/jdk8.latest \
-Dmvn2.exe=/path/to/latest/bin/mvn

当项目主页有编译指南时,请参考项目主页,同时上面的编译编译指导会被删掉,避免重复。

OpenJDK代码覆盖率

Adopt OpenJDK的代码覆盖率指南code-coverage.

现存代码测试覆盖率报告 (OpenJDK8 和 OpenJDK9)

我们最近为运行在Adopt OpenJDK 编译集群上的 OpenJDK8和 OpenJDK9持续集成增加了代码测试覆盖率报告。自动为OpenJDK8OpenJDK9发布[jcov 报告].

运行OpenJDK9的代码测试覆盖率测试

提示:

  • 同样的步骤也适用于’OpenJDK8′
  • 这些步骤仅用于生成’jdk’的测试覆盖率报告
  • 我们没有能够成功的生成’langtools’的测试覆盖率报告
  • 保证最新的jdk映像在OpenJDK9编译生成目录 (参见 编译你自己的OpenJDK).
  • 安装 jtreg with the jcov, 参见JTReg的使用.
  • 把这些exports添加到你的.bash_xxx配置文件中:
  • export SOURCE_CODE=/home/<username>/workspace/jdk9/
    export JTREG_INSTALL=/home/<username>/workspace/jtreg
    export JT_HOME=$JTREG_INSTALL
    export JTREG_HOME=$JTREG_INSTALL
    export PRODUCT_HOME=$SOURCE_CODE/build/linux-x86_64-normal-server-release/images/jdk
    export JPRT_JTREG_HOME=${JT_HOME}
    export JPRT_JAVA_HOME=${PRODUCT_HOME}
    export JTREG_TIMEOUT_FACTOR=5
    export CONCURRENCY=8
    $ cd $SOURCES/jdk9/jdk/test
  • 编辑 Makefile 文件,在 # Make sure jtreg exists行之前增加如下行:
  • jdkroot=<你的jdk9代码路径, 参见上面>
    
    JTREG_TEST_OPTIONS += -jcov/classes:$(jdkroot)/build/linux-x86_64-normal-server-release/jdk/modules/java.base
    JTREG_TEST_OPTIONS += -jcov/source:$(jdkroot)/jdk/src/java.base/share/classes
    JTREG_TEST_OPTIONS += -jcov/include:*

debug 模式执行测试

$ cd ..
$ make test LOG=debug

打开生成的测试覆盖率报告

一旦结束了, 进入如下路径查看报告:

$ cd $SOURCES/jdk9/build/linux-x86_64-normal-server-release/testoutput/jdk_core/JTreport/jcov/
$ open index.html

这会花费几个小时,具体时间取决于你的系统性能和可用资源。

请参考jcov的编译。

深入 hotspot 的东西

hotspot 源码目录中的GC选项

../hotspot/src/share/vm/gcimplementation/g1/g1globals.hpp

../hotspot/src/share/vm/runtime/globals.hpp

HotSpot 命令行选项 – PrintAssembly

HotSpot 代码片段 – 由于不同GC选项引起的各种分支选择

GC类型 老年代 老年代
SerialGC (-XX:+UseSerialGC) 串行 串行
ParallGC (-XX:+UseParallelGC) 并行 串行
Parallel Compacting(-XX:+UseParallelOldGC) 并行 并行
Concurrent Mark Sweep GC (-XX:+UseConcMarkSweepGC) 并行 并发-标记-清除

参考

来自./hotspot/src/share/vm/memory/universe.cpp的代码片段

Universe::initialize_heap()
if (UseParallelGC) {
    #ifndef SERIALGC
    Universe::_collectedHeap = new ParallelScavengeHeap();
    #else // SERIALGC
        fatal("UseParallelGC not supported in this VM.");
    #endif // SERIALGC
} else if (UseG1GC) {
    #ifndef SERIALGC
    G1CollectorPolicy* g1p = new G1CollectorPolicy();
    G1CollectedHeap* g1h = new G1CollectedHeap(g1p);
    Universe::_collectedHeap = g1h;
    #else // SERIALGC
        fatal("UseG1GC not supported in java kernel vm.");
    #endif // SERIALGC
} else {
    GenCollectorPolicy* gc_policy;
    if (UseSerialGC) {
        gc_policy = new MarkSweepPolicy();
    } else if (UseConcMarkSweepGC) {
        #ifndef SERIALGC
        if (UseAdaptiveSizePolicy) {
            gc_policy = new ASConcurrentMarkSweepPolicy();
        } else {
            gc_policy = new ConcurrentMarkSweepPolicy();
        }
        #else // SERIALGC
            fatal("UseConcMarkSweepGC not supported in this VM.");
        #endif // SERIALGC
    } else { // default old generation
        gc_policy = new MarkSweepPolicy();
    }
    Universe::_collectedHeap = new GenCollectedHeap(gc_policy);
}

打开串行GC – 只支持串行GC的平台?


.
.
Universe::initialize_heap()
if (UseParallelGC) {
        fatal("UseParallelGC not supported in this VM.");
} else if (UseG1GC) {
        fatal("UseG1GC not supported in java kernel vm.");
} else {
    GenCollectorPolicy* gc_policy;
    if (UseSerialGC) {
        gc_policy = new MarkSweepPolicy();
    } else if (UseConcMarkSweepGC) {
            fatal("UseConcMarkSweepGC not supported in this VM.");
    } else { // default old generation
        gc_policy = new MarkSweepPolicy();
    }
    Universe::_collectedHeap = new GenCollectedHeap(gc_policy);
}
.
.
.

关闭串行GC – 支持并行和串行两种GC方式的平台?


.
.
Universe::initialize_heap()

if (UseParallelGC) {
    Universe::_collectedHeap = new ParallelScavengeHeap();
} else if (UseG1GC) {
    G1CollectorPolicy* g1p = new G1CollectorPolicy();
    G1CollectedHeap* g1h = new G1CollectedHeap(g1p);
    Universe::_collectedHeap = g1h;
} else {
    GenCollectorPolicy* gc_policy;

    if (UseSerialGC) {
        gc_policy = new MarkSweepPolicy();
    } else if (UseConcMarkSweepGC) {
        if (UseAdaptiveSizePolicy) {
            gc_policy = new ASConcurrentMarkSweepPolicy();
        } else {
            gc_policy = new ConcurrentMarkSweepPolicy();
        }
    } else { // default old generation
        gc_policy = new MarkSweepPolicy();
    }

    Universe::_collectedHeap = new GenCollectedHeap(gc_policy);
}
.

编译器相关

OptViewer工具,参考这个邮件

修改 java.c,使用 Eclipse运行 hotspot

[可选,但很有意思的一个挑战] 请参考这些指南。

修改 java.c,使用命令行运行 hotspot

[可选,但很有意思的一个挑战]

和修改java.c并在 Eclipse运行的挑战类似,但是使用需要使用命令行和一个简单的编辑器来完成这一挑战。

敬请期待

  • Nashorn的一些好东西
  • Lambda进阶
  • OpenJDK(JDK)代码测试覆盖率工具(两个)
  • OpenJDK build warnings tool (which are currently suppressed in the build process)…
  • OpenJDK 编译警告工具(当前在编译过程中被禁用)
  • 使用 jitWatch观察 HotSpot JVM JIT编译过程
  • 运行在 JVM 上的Smalltalk
  • 运行在 JVM 上的Lisp

Hotspot JVM 任务: 附加任务 (中级和高级)

  • 向 java.c 中增加 debug 级别的 log信息,重新编译 gamma,运行示例程序或者任何其他基于 java 的程序。
  • 重构 java.c,插入 debug 级别的 Log细腻,重新编译 gamma,运行示例程序或者任何其他基于 java 的程序。
  • 完成以上两步后,加载一个低延迟,GC 调优过的 java 程序,开启 gc log,检查 gc log,看性能是否有变化(性能调优相关的东西)。
  • 在 javac 中实现 ?:运算符(学习怎么修改 javac 的好方法),编译一个java 程序。
  • 体味GC 的乐趣:使用自定义的垃圾收集器替换已有的。重新激活代码库中的 PermGen 或者 iCMS 。在现在 HotSpot 版本中增加任意你想做的修改。
  • 修改 javac 使他能够解析和编译新的语言特性,或者让它能够兼容其他基于 JVM 的方言、甚至于更老的程序语言,例如 C、汇编、Scheme 或Smalltalk
  • 使用自定义类加载器替换内置内加载器。
时间: 2024-11-03 20:47:06

Adopt Open JDK官方文档(十)的相关文章

Adopt Open JDK官方文档(八)OpenJDK 项目介绍

8.OpenJDK 项目介绍 Penrose Nashorn JMH Kulla Valhalla 对于其他项目,请参见OpenJDK http://mail.openjdk.java.net/mailman/listinfo 以及对应项目的Mailing Lists. 8.1 Penrose Penrose 项目提供jigsaw 与 OSGi 环境的互操作性. 因为原Jigsaw JDK8 EA Build 已经停止开发,Penrose 项目的源码当前处于过期状态.Penrose项目仍处于探索

Adopt Open JDK官方文档(四)基于虚拟机的编译环境

译文地址 译者:bobwenx@gmail.com 4.基于虚拟机的编译环境 准备工作 编译你自己的虚拟机 编译你自己的轻量级虚拟机 在Host 与 Guest VM 之间共享文件 适用于 OpenJDK 8 的Vagrant Puppet 环境 4.1 准备工作 请注意,因为所需下载的VM镜像文件高达数GB, 请在稳定的网络环境中进行下载.如果有可能,请使用支持断点续传的下载管理器. MacOS 用户: 请使用 zipeg 来解压缩下载后的文件. 下载后的 .OVA 与 .OVF 文件可以使用

Adopt Open JDK官方文档(二)如何使用导航和取得进步?

2.如何使用导航和取得进步 在黑客日和讲习班开始之前我需要做些什么呢 来之前你应该准备好你的笔记本电脑并搭建好当天需要的环境 检查硬件要求/操作系统/软件要求 下载支撑软件 搭建或者下载虚拟机 搭建或者下载Docker镜像 检查虚拟机和Docker镜像是否正常工作 检查OpenJDK是否正常工作 在"参加黑客日和讲习班之前应该如何准备"中查看对于以上几点的详细解释.如果这个对你来说不适用或者你已经完成了这些工作那么请看下面的部分.活动当天如何在你的机器上搭建环境 看完"参加黑

Adopt Open JDK官方文档(三)对Adopt OpenJDK的初步了解

3. 对Adopt OpenJDK的初步了解 什么是OpenJDK? OCA(Oracle贡献者协议)- 签OCA Adopt OpenJDK和Adopt-a-JSR的计划报告 Adopt OpenJDK的宣传单 JUG宣传单样本 已经支持的OSes和IDEs对照表 OpenJDK的建立基准 OpenJDK的Bug数据库 安装tree指令 3.1 OpenJDK 从这些地方了解它: 什么是Adopt OpenJDK – 可以加入有趣的站点 演讲 1 演讲 2 视频 PDF(演讲全篇) PPT(演

Adopt Open JDK官方文档(五) Docker镜像

译者:渊策 5.1 复制镜像 镜像可以从别的设备复制并导入本地的Docker仓库. 保存镜像的命令为: docker save -o <save image to path> <image name> 或者 docker save <image name> > <save image to path> 保存镜像示例 docker save -o base-image-openjdk9.tar neomatrix369/openjdk9-base-ima

TestNG官方文档中文版(9)-重复失败测试,junit测试,jdk1.4支持

5.10 - Rerunning failed tests 套件中的测试失败时,每次testNG都会在输出目录中创建一个名为testng-failed.xml 的文件.这个xml文件包含只重新运行这些失败的测试方法的必要信息,容许只运行这些 失败的测试而不必运行全部测试.因此,一种典型的情况将是这样: java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -d test-outputs testng.xml java -classpat

《Apache Velocity用户指南》官方文档

Quick Start 本项目是 Apache Velocity官方文档的中文翻译版,Velocity类似与JSP,是一种基于Java的模板引擎.它可以在web页面中引用Java代码中定义的数据和对象,而Velocity的作用就是把Web视图和java代码进行组装在一起.本次翻译主要针对对Velocity感兴趣和工作中使用到Velocity的开发人员提供有价值的中文资料,希望能够对大家的工作和学习有所帮助. 由于我也是第一次接触Velocity,还不是很深入,翻译的时候也查看了一些博客以及其他网

Java官方文档索引

之前一直感觉Java的官方文档有些杂乱,最近特意整理了一下,仅供参考. 入口 Oracle官方文档入口:http://docs.oracle.com/.下级页面这边只整理了JavaEE跟JavaSE的文档. JavaEE JavaEE文档入口:http://docs.oracle.com/javaee/.下级页面有JavaEE相关的API跟Tutorial文档: http://docs.oracle.com/javaee/7/api/ http://docs.oracle.com/javaee/

《Spring 5官方文档》翻译邀请

公司新的应用已经开始使用Spring 5,所以本月组织大家翻译<Spring 5 官方文档> SINGLE网页版  PDF版本. 如何领取 通过评论领取想要翻译的文章,每次领取一章或一节(根据内容长短),翻译完后再领取其他章节.领取完成之后,建议在一个星期内翻译完成,如果不能完成翻译,也欢迎你邀请其他同学和你一起完成翻译.请谨慎领取,并发网是非盈利组织,没办法去跟进每一篇译文的进展,所以很多文章领取了没有翻译,会导致文章长时间没人翻译. 如何提交? 翻译完成之后请登录到并发编程网后台,点击左上