AJDK 8.0.0 Release Notes

简介: AJDK 8.0.0 Release Notes

记在这里,便于测试。

版本号

$ java -version
java version "1.8.0_66"
OpenJDK Runtime Environment (Alibaba 8.0.0) (build 1.8.0_66-b60)
OpenJDK 64-Bit Server VM (Alibaba 8.0.0) (build 25.66-b60, mixed mode)

多租户(Technical Preview)

多租户JDK通过JVM的虚拟化/资源隔离的能力,支持容器的多租户,多个应用可以同时部署在同一个“多租户”容器而互相不受影响,以提高应该的部署密度,从而可以更大程度的提高资源利用率,降低单应用的部署成本(如果需要多租户支持,请联系JVM团队)。

  • CPU隔离
    增加命令行选项//-XX:+TenantCpuThrottling//,用于开启针对单个租户的cpu配额功能。默认关闭,重启生效。
  • 内存隔离
    增加命令行选项//-XX:+TenantHeapThrottling//,用于开启针对单个租户的内存隔离、限制功能,目前该功能只支持G1垃圾回收策略。默认关闭,重启生效。
    可以通过TenantConfiguration类设定每个租户使用的内存上限,当租户使用内存超过指定上限时,JVM会尝试触发Full GC来回收空间以满足该租户的内存限制,如果GC后仍无法满足,会在分配内存的线程中抛出OutOfMemoryError错误。

工具

jcmd扩展

  • 增加 JavaAgent.load 和 AgentLib.load 两条命令,用户可以不写任何代码,使用这两条命令实现java agent和jvmti agent的动态加载。

诊断和控制

  1. 跟踪热点大方法, 应用根据方法跟踪信息,减少Method Size, 提高JIT的内联有效性,从而提高热点方法性能
  • 命令行选项-XX:+TraceBigHotMethod,用于在标准输出中打印字节码尺寸较大,并且被频繁调用的方法。默认关闭,可动态打开。
  1. 获取异常丢失的StackTrace
  • 在默认模式下, JVM会忽略热点Exception堆栈的生成。用户可以在应用运行时,动态通过jinfo等工具将OmitStackTraceInFastThrow调整为false,从而获得完整的Exception的StackTrace(高级特性,JVM团队指导下使用)。
  1. 大数组分配引起的GC问题
  • 增加命令行选项-XX:ArrayAllocationWarningSize=xxx,默认值512M。堆中分配大对象的大小超过该值的时候,标准输出中打印大数组的分配堆栈,用来排查大数组分配导致的GC问题。
  1. DirectMemory使用警告
  • 增加命令行选项-XX:DirectMemoryUsageWarningRatio=xxx,当使用的direct memory占direct memory最大值(MaxDirectMemory)的百分比超过该值时,在标准输出中打印日志,用来排查分配的direct memory超过最大值而导致的GC问题。
  1. GC问题辅助排查
  • 用户可以在应用运行时,动态通过jinfo等工具修改GC相关参数: DisableExplicitGC,ExplicitGCInvokesConcurrent和PrintJNIGCStalls, 帮助排查和解决GC问题。
  1. JVM Crash Log增强
  • 在AJVM的crash日志中,打印出异常时pc前后的汇编指令,辅助排查解决JVM Crash的Root Cause。

性能优化

  1. CMS Full GC 并行化
  • 为CMS算法添加了新的并行FullGC算法,默认关闭。在启动参数显式设置选项 -XX:+CMSParallelFullGC 可以启用该gc算法。开启后,当应用使用CMS算法时候,如果触发FullGC,可以大幅降低FullGC的停机时间,FullGC线程数可以通过-XX:ParallelGCThreads=x来指定,和CMS的minor gc线程数一致。
  1. 将闲置的Java Heap归还物理内存,提高内存的使用效率,提高应用部署密度
  • 使用命令行选项-XX:+DeallocateHeapPages,CMS可以把不使用的HEAP归还给物理内存。默认关闭,可以动态修改。(注意:如果之前使用了ReclaimMostNativeMemory参数,请改用DeallocateHeapPages)。
  1. ParNew YGC优化
  • 改善ParNewGC中的任务窃取策略,增加新的Hotspot命令行选项-XX:StealingFailureThreshold=xxx,默认值是10,当失败次数>10, 放弃任务窃取,用于改善ParNewGC中任务分配不均可能导致的CPU浪费情况。
  1. CRC32C
  • 基于x86_64硬件指令,性能更优的intrinsic的CRC32C API,临时数据校验可以从CRC32改用CRC32C。持久数据考虑兼容性,不建议改变。(注意,如果之前使用了TCRC32C,请该用CRC32C)
  1. Native内存优化,用户应用透明
  • 使用jemalloc,提高native内存分配的效率,提高系统内存使用率。后续版本会基于jemalloc提供native内存诊断功能。
  1. JNI 调用 优化,用户应用透明
  • 调整 x86_64 平台下 JNI 调用被 JIT 后所生成的代码的分支顺序,通过减少流水线停顿来提升 JNI 调用性能。

新增应用编程接口(API)

JNI获取线程信息

  • 添加了一个JMM编程接口“GetThreadJNIEnvInfo”,用于从JNI快速获取所有线程相关信息(高级特性,JVM团队指导下使用)。

Bug修复

JDK-8048556 - [ref: 5]

JDK-8139549 - [ref: 6]

试用功能

Symbol Translation Service

  • 增加了Hotspot命令行选项-XX:+UseSymbolTranslation, 可以根据pc值获得相应的方法symbol信息,用于支持性能profiling工具。

NOTES: 如果需要,请联系JVM团队

跟踪G1大对象分配,提升G1使用的性能

  • 在使用G1 GC策略时,Humongous对象的分配会极大伤害G1的性能,使用命令行选项 -XX:+TraceG1HObjAllocation,在标准输出打印大对象的分配堆栈。用户可以根据这些Trace信息,在应用层面减少大对象的分配,提高G1的效率

升级向导

spring 升级到 3.2.9 以上(如果要用jdk8完整新特性,建议spring升到4.x,servlet升到3.x)

webx应用如果想用spring4,建议webx 升级,参考:http://gitlab.alibaba-inc.com/middleware-container/citrus/wikis/webx-spring4-jdk8

如果有org.projectlombok:lombok, 升级到1.14.X,不要升级到1.16.x

如果有org.eclipse.jdt.core.compiler:ecj, 升级到4.4.2及以上

目前集团很多二方包依赖spring2.x,二方包很容易把spring2.x引进来。排除spring2.x,强烈建议利用这个空包来排除。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring</artifactId>
    <version>999-not-exist</version>
  </dependency>

启动参数调整:

jdk8去除了Perm区,所以:PermSize改为MetaspaceSize,MaxPermSize改为MaxMetaspaceSize。

另外以下参数在jdk8已经不支持,会报警告,建议删除:UseCMSCompactAtFullCollection和CMSFullGCsBeforeCompaction

目录
相关文章
no version information available的解决办法
no version information available的解决办法
574 0
|
iOS开发
you must have accepted the latest version of the IOS Developer Program Agreement
you must have accepted the latest version of the IOS Developer Program Agreement
54 0
you must have accepted the latest version of the IOS Developer Program Agreement
|
网络协议 网络安全 C语言
NETMF Versions 4.1 Release 发布
NETMF Versions 4.1 Release 发布
654 0
|
容器 Kubernetes Perl
分类解读 | 寻找 K8s 1.14 Release Note 里的“蚌中之珠”
Kubernetes 1.14.0 Release 已经于 3 月 25 日正式发布。相信你也已经注意到,相比于 1.13 和 1.12 版本,这次发布包含的重要变更非常多,其对应的 Release Note 的篇幅长度也创下了“新高”。
572 0
|
调度 容器 Perl
寻找 K8s 1.14 Release 里的“蚌中之珠”
K8s 1.14 发布了,Release Note那么长,我们该从何读起?
9551 0
|
Java 容器
Clean Code Notes
《代码整洁之道》笔记
1326 0
|
SQL 弹性计算 Java
Cloud Toolkit Release Notes
此页面中出现的任何贡献者,如您需要添加更多信息,请联系我们,我们愿意为所有 Cloud Toolkit 的贡献者提供一定的推广或者隐匿处理。再次感谢所有为 Cloud Toolkit 发展做出贡献的开发者。
8306 0
|
容器
CloudProvider Release Notes
阿里云容器服务 CloudProvider release notes 2018-06-25 支持service.beta.kubernetes.io/alicloud-loadbalancer-backend-labelannotation让用户能够根据node的标签来指定SLB挂载哪些节点作为后端。
3313 0
|
虚拟化 C++
黄军雷 ©️ V3.7 Release 2018-06-16
一个人可以如同产品一样去经营和管理,在生日之际梳理新版的点点滴滴。 一、What's New? 新角色 新挑战:初为人父,感叹女儿每天的努力,向其学习! 新部门 新伙伴:面对近百人的研发团队,如何推动大家高效协作? 二、企业级项目管理能力 PMP...
945 0
|
JavaScript Apache PHP