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

目录
相关文章
|
3月前
|
存储 人工智能 自然语言处理
构建AI智能体:十八、解密LangChain中的RAG架构:让AI模型突破局限学会“翻书”答题
本文深入探讨了如何利用LangChain框架实现RAG(检索增强生成)架构,构建智能问答系统。文章首先介绍了RAG技术解决大模型知识更新和准确性问题的原理,以及LangChain作为开发框架提供的模块化组件。详细解析了LangChain的核心模块(模型、提示、索引、链等)和四种ChainType(stuff、map_reduce、refine、map_rerank)的特点与适用场景。通过一个完整的代码示例,展示了如何结合DeepSeek模型和FAISS向量数据库处理PDF文档,实现本地知识库问答功能
652 9
|
自然语言处理 Kubernetes 机器人
基于OpenIM 实现聊天机器人功能
基于OpenIM 实现聊天机器人功能
677 0
|
缓存 监控 druid
万字长文,带你快速上手这些池化技术!| Java 开发实战
池化技术 小伙伴们好久不见呀~ 😝 额 转眼就到了 儿童节 啦 哈哈哈 祝各位大小朋友节日快乐! 轻轻松松过节,开开心心玩耍,老顽童也不错呀😝 哈哈哈 (不忘童真!) 嘿嘿 迎来了自己的第一篇 万字长文! 😝 (中间除了看看金色的雨外,还在做其他笔记~ 所以就拖到现在了 ,,ԾㅂԾ,, 这篇长文除了详细介绍线程池这个点以及它的使用场景外,还分享了下几种连接池滴用法以及避开一些坑🕳,(图还挺多的~) 希望对你有所帮助!!冲冲冲!😋 池化技术~,不知道小伙伴们对这个词是怎么理解的? 为什么要有这个技术呢?解决什么 痛点 呢?哈哈哈 带着小小的思考和 4ye 一起往下看看叭~ 池化
901 0
|
8月前
|
JavaScript 前端开发 中间件
重新定义状态管理:Zustand 如何以极简之力征服复杂应用
重新定义状态管理:Zustand 如何以极简之力征服复杂应用
368 1
|
前端开发 API UED
React 懒加载图片 Lazy Image
懒加载是一种优化技术,通过延迟加载不在视口内的图片,减少初始页面加载时间,提升用户体验。本文从基础概念入手,逐步探讨 React 中实现图片懒加载的常见问题、易错点及解决方案,并通过代码案例详细解释。
606 3
|
存储 缓存 关系型数据库
MariaDB 和 GreatSQL 性能差异背后的真相
【10月更文挑战第22天】本文介绍了 MariaDB 和 GreatSQL 两款数据库系统的背景、性能差异因素及实际应用场景。MariaDB 是 MySQL 的分支,具有良好的社区支持和丰富的插件生态系统;GreatSQL 是国产的 MySQL 兼容数据库,专注于企业级应用场景。文章详细对比了两者的存储引擎优化、查询优化器差异、缓存机制和并发处理能力,并分析了它们在 OLTP 和 OLAP 场景中的性能表现。
673 3
莉莉丝-游戏用户日志分析
莉莉丝游戏用户日志分析案例图
|
机器学习/深度学习 人工智能 自然语言处理
探索深度学习中的注意力机制:原理、应用与未来趋势
探索深度学习中的注意力机制:原理、应用与未来趋势
837 0
|
分布式计算 DataWorks 大数据
MaxCompute产品使用合集之odps.sql.mapper.split.size和odps.stage.mapper.split.size这两个参数的区别是什么
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
存储 关系型数据库 MySQL
怎么使用 Flink 向 Apache Doris 表中写 Bitmap 类型的数据
怎么使用 Flink 向 Apache Doris 表中写 Bitmap 类型的数据
780 0