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,用于在标准输出中打印字节码尺寸较大,并且被频繁调用的方法。默认关闭,可动态打开。
  2. 获取异常丢失的StackTrace
    • 在默认模式下, JVM会忽略热点Exception堆栈的生成。用户可以在应用运行时,动态通过jinfo等工具将OmitStackTraceInFastThrow调整为false,从而获得完整的Exception的StackTrace(高级特性,JVM团队指导下使用)。
  3. 大数组分配引起的GC问题
    • 增加命令行选项-XX:ArrayAllocationWarningSize=xxx,默认值512M。堆中分配大对象的大小超过该值的时候,标准输出中打印大数组的分配堆栈,用来排查大数组分配导致的GC问题。
  4. DirectMemory使用警告
    • 增加命令行选项-XX:DirectMemoryUsageWarningRatio=xxx,当使用的direct memory占direct memory最大值(MaxDirectMemory)的百分比超过该值时,在标准输出中打印日志,用来排查分配的direct memory超过最大值而导致的GC问题。
  5. GC问题辅助排查
    • 用户可以在应用运行时,动态通过jinfo等工具修改GC相关参数: DisableExplicitGC,ExplicitGCInvokesConcurrent和PrintJNIGCStalls, 帮助排查和解决GC问题。
  6. 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线程数一致。
  2. 将闲置的Java Heap归还物理内存,提高内存的使用效率,提高应用部署密度
    • 使用命令行选项-XX:+DeallocateHeapPages,CMS可以把不使用的HEAP归还给物理内存。默认关闭,可以动态修改。(注意:如果之前使用了ReclaimMostNativeMemory参数,请改用DeallocateHeapPages)。
  3. ParNew YGC优化
    • 改善ParNewGC中的任务窃取策略,增加新的Hotspot命令行选项-XX:StealingFailureThreshold=xxx,默认值是10,当失败次数>10, 放弃任务窃取,用于改善ParNewGC中任务分配不均可能导致的CPU浪费情况。
  4. CRC32C
    • 基于x86_64硬件指令,性能更优的intrinsic的CRC32C API,临时数据校验可以从CRC32改用CRC32C。持久数据考虑兼容性,不建议改变。(注意,如果之前使用了TCRC32C,请该用CRC32C)
  5. Native内存优化,用户应用透明
    • 使用jemalloc,提高native内存分配的效率,提高系统内存使用率。后续版本会基于jemalloc提供native内存诊断功能。
  6. 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

时间: 2024-08-08 21:50:10

AJDK 8.0.0 Release Notes的相关文章

Git for Windows v2.11.0 Release Notes

homepage faq contribute bugs questions Git for Windows v2.11.0 Release Notes Latest update: December 1st 2016 Introduction These release notes describe issues specific to the Git for Windows release. The release notes covering the history of the core

MongoDB 3.0 Release Notes

MongoDB 3.0支持WiredTiger存储引擎,提供可插拔存储引擎API,新增SCRAM-SHA-1认证机制,改进explain功能. 可插拔存储引擎API 允许第三方为MongoDB开发存储引擎 WiredTiger存储引擎 首次引入WiredTiger存储引擎,目前支持两种存储引擎: MMAPv1,3.0版本之前的存储引擎,也是3.0默认的存储引擎 WiredTiger,仅可用于MongoDB 3.0 64位版本 用法 WiredTiger支持MonoDB的所有特征,复制集和分片集群

Release Notes - Apache Storm - Version 0.9.2-incub

Release Notes - Apache Storm - Version 0.9.2-incubating Sub-task [STORM-207] - Add storm-starter as a module [STORM-208] - Add storm-kafka as a module [STORM-223] - Safe YAML Parsing [STORM-232] - ship JNI dependencies with the storm jar [STORM-233]

详解cocos2dx 3.0的release版本在android平台的签名过程

当您的游戏准备发布前,需要编译成为release版本,命令中需要增加 -m release,编译命令如下: cocos compile -p android -m release 在编译结束后,生成xxx_release_unsigned.apk,此时会提示进行签名,需要输入.keystore的路径. .keystore的生成方法: 使用keytool,命令如下: keytool -genkey -v -keystore my-release-key.keystore -alias alias_

VC6.0 编译生成Release或Debug版本

可以project->Set Active Config,选中release版本.此后,按F5或F7编译所得的结果就是release版本. -------------------------------------------------------- -------------------------------------------------------- vc6.0在设置选了win32 release,但是点了确定再打开设置,为什么又变成Win32 Debug了? 工程设置对话框中显示

winform下mapxtreme2008 v7.0 生成release版提示找不到dll问题

在winform下基于mapxtreme2008 v7.0 生成了一个地图软件,用debug方式运行无误,但改为release版时提示缺少一大堆dll,如: 无法从C:\Program Files (x86)\Common Files\MapInfo\MapXtreme\7.0.0下复制AllType.DLL 等 经搜素,在C:/Windows/assembly/GAC_32/MapInfo.CoreEngine.Wrapper/7.0.0.220__93e298a0f6b95eb1/下包含所有

001-Spring Cloud Edgware.SR3 升级最新 Finchley.SR1,spring boot 1.5.9.RELEASE 升级2.0.4.RELEASE注意问题点

一.前提 升级前 => 升级后 Spring Boot 1.5.x => Spring Boot 2.0.4.RELEASE Spring Cloud Edgware SR3 => Spring Cloud Finchley.SR1 1.1.Eureka Server ureka Server 依赖更新 升级前: <dependency> <groupId>org.springframework.cloud</groupId> <artifact

SpringBoot(2.0.4.RELEASE)+Elasticsearch(6.2.4)+Gradle简单整合

记录一下SpringBoot(2.0.4.RELEASE)+Elasticsearch(6.2.4)+Gradle整合的一个小例子. 1.在Gradle内加入相关jar包的依赖: compile('org.springframework.boot:spring-boot-starter-web') compile('org.springframework.boot:spring-boot-starter-thymeleaf') compile('org.springframework.boot:

iOS 9的新的改变 iOS SDK Release Notes for iOS 9 说了些改变

iOS 9的新的改变 iOS SDK Release Notes for iOS 9 说了些改变 看了下还算能理解!!!有兴趣可以看看哈!!!不喜勿喷!!后面的对于废除的方法什么有用感觉!!! ios9 iOS SDK更新内容介绍 重点介绍: 这是一个初步的文档的API或技术发展.苹果是提供这一信息来帮助你计划的采用所述技术和编程接口使用品牌产品.此信息可能发生变化,根据这个文档和软件实现应与最后的操作系统软件测试和最终的文档.新版本的文档可以提供未来贝塔的API或技术. 内容: 介绍 iOS