Apusic文档中心
首页
  • 应用服务器 AAS
  • 负载均衡器 ALB
  • 分布式消息队列 ADMQ
  • 分布式缓存 AMDC
  • 分布式配置中心 ADCC
  • Java开发工具包软件 AJDK
  • 搜索引擎 ASE
  • 中间件云平台 ACP
  • 统一管理平台 AUMP
  • 云原生中间件管理 ACMP
  • DevOps平台 ADOP
  • 许可授权中心 ACLS
  • Copilot智能问答系统 ACS
  • 监控平台 AMP
  • 智能日志 AILP
  • 应用性能管理 AAPM
  • 智能告警 AAlarm
  • 主数据管理 AMDM
  • 数据交换平台 ADXP
  • 企业服务总线 AESB
  • 数据智脑 ADPR
  • 服务治理 ASGP
  • 统一身份管理 AIDM
  • 标准模板
  • Markdown教程 (opens new window)
  • VuePress官方社区 (opens new window)
  • 帮助
贡献文档 (opens new window)
首页
  • 应用服务器 AAS
  • 负载均衡器 ALB
  • 分布式消息队列 ADMQ
  • 分布式缓存 AMDC
  • 分布式配置中心 ADCC
  • Java开发工具包软件 AJDK
  • 搜索引擎 ASE
  • 中间件云平台 ACP
  • 统一管理平台 AUMP
  • 云原生中间件管理 ACMP
  • DevOps平台 ADOP
  • 许可授权中心 ACLS
  • Copilot智能问答系统 ACS
  • 监控平台 AMP
  • 智能日志 AILP
  • 应用性能管理 AAPM
  • 智能告警 AAlarm
  • 主数据管理 AMDM
  • 数据交换平台 ADXP
  • 企业服务总线 AESB
  • 数据智脑 ADPR
  • 服务治理 ASGP
  • 统一身份管理 AIDM
  • 标准模板
  • Markdown教程 (opens new window)
  • VuePress官方社区 (opens new window)
  • 帮助
贡献文档 (opens new window)
文档中心
  • 金蝶Apusic应用服务器

  • 金蝶Apusic负载均衡器

  • 金蝶Apusic分布式消息队列

  • 金蝶Apusic分布式缓存

  • 金蝶Apusic分布式配置中心

  • 金蝶Apusic Java开发工具包软件

    • 产品白皮书
    • V8.0

      • 安装手册
      • 用户手册
      • 发版说明
    • V17_with_CRaC

  • 金蝶Apusic全文检索

发版说明

# 发版说明

Apusic JDK 是一款高性能、生产环境就绪的OpenJDK发行版本,完全兼容开源 OpenJDK,基于华为毕昇 JDK发展而来,支持多种运行平台,具备更快的云应用启动速度,更好的性能以及提供更为便捷的分析、诊断工具,适合微服务、云原生应用、大数据等实际应用场景,提供最优的 Java 生产环境及解决方案。此外,Apusic JDK 也是 Apusic 应用服务器的运行环境,适配大量 Java 应用程序,解决了业务实际运行中遇到的多个问题,能够为 Java 应用程序提供一个安全、稳定、可扩展、高性能的运行环境。

# 关于此版本

本次发版版本为 Apusic JDK V8.0,基于毕昇JDK1.8.0_422,完全兼容OpenJDK8.0,能够为 Java 应用程序提供一个安全、稳定、可扩展、高性能的运行环境。

# 新功能及特性增强

# 支持 JFR

JFR(Java Flight Recorder)是 Java 平台上的一款性能分析工具,它能够捕获和记录JVM运行时的各种数据,帮助开发人员分析应用程序的性能问题并优化程序性能。可通过 JVM 参数开启 : -XX:StartFlightRecording:filename=record.jfr,dumponexit=true

# AppCDS

Java 程序运行初始,类的加载是一个比较耗时的过程,且在每次程序运行中均需要执行一遍。而 CDS(Class Data Sharing)技术,把类加载后的数据保存到文件中。在下次运行时,直接将加载后的类数据从文件中恢复到内存中,不需要再重新执行类的加载过程,从而提高性能。而 AppCDS 在 CDS 的基础上,增加了对应用类的支持。

# 快速序列化

序列化是将一个对象序列化为字节流,方便进行传输和保存。OpenJDK 原生的序列化机制耗时较长,序列化的数据太大,反序列化过程查找classmeta太慢。Apusic JDK 优化序列化和反序列化的过程,加快了序列化的速度。

# Dynamic CDS特性

Dynamic CDS 技术是 OpenJDK 社区在高版本提出的用于提高Java应用内存使用效率和启动速度的新特性。Apusic JDK 支持该特性,相对于 AppCDS 而言,共享类扩展至自定义类加载器加载的类,扩展了共享类的支持范围,以带来显著的性能提升。

# G1 垃圾收集器优化

  • G1 NUMA-Aware特性:在NUMA架构下,跨NUMA节点操作内存相比本NUMA节点操作内存时延会成倍增加,NUMA-Aware特性目的是让JAVA用户尽可能操作本NUMA节点上内存,从而提升JVM访存速度。
  • G1 Full GC并行化:G1 算法在mark、prepare、adjust、compact等阶段优化成多线程执行方式,有效降低Full GC的STW时间,改善系统最坏情况下的G1 Full GC性能。
  • G1 GC内存伸缩特性:OpenJDK 8 中 G1 垃圾收集器无法及时将空闲的 Java 堆内存释放给操作系统。G1 仅在 FullGC 才会把空闲的Java堆内存释放给操作系统。但由于 G1 尽可能避免触发 FullGC,因此在许多情况下,除非强制从外部执行 FullGC,否则 G1 不会将空闲的Java堆内存释放给操作系统。Apusic JDK 能够检测应用负载下降和Java堆有空闲内存的情况,并自动减少JVM Java堆占用情况,将空闲内存资源归还给操作系统。

# 运维工具增强

  • jcmd工具新增 VM.classes 命令,打印所有类的信息。
  • jcmd工具新增 VM.classloaders 命令,打印类加载器层次结构和类加载器详细信息。
  • jcmd工具新增 VM.metaspace 命令,打印元空间的统计信息。
  • jcmd工具新增 System.trim_native_heap 命令,底层调用glibc函数malloc_trim,将glibc不用的内存及时还给操作系统。
  • Thread.print 功能增强:增强 jstack 和 jcmd Thread.print 功能,打印线程堆栈时输出更多的信息(cpu,elapsed,allocated,defined_classes)
  • TraceClassLoading 功能增强:增强TraceClassLoading功能,输出更多的类加载信息(时间、线程id、类加载器以及类加载时的线程堆栈),方便用户排查类加载相关问题。
  • 异步GC日志配置:解决写入GC日志可能会被阻止,进程中维护一个循环固定大小的内存缓冲区,先将GC日志写入到缓冲区,然后通过单独的线程将缓冲区的内容刷新到GC日志文件中。
  • glibc内存整理:JVM 通过 glibc来进行内存的分配与释放,但是有时(取决于分配的粒度和许多其他因素)存在即使JVM调用free(3)将内存返回给glibc,glibc依然保留这些已释放的C堆内存而不是返还给操作系统,这将造成不好排查的(非JAVA/JVM层面的)RSS内存占用持续增长。
  • jmap 并行扫描:可指定并行线程数,有效提高jmap堆扫描效率、减少扫描时间。

# 主要的技术变化

Apusic JDK V8.0 主完全兼容 OpenJDK8.0

# 程序缺陷修复

https://mail.openjdk.org/pipermail/jdk8u-dev/2024-July/018904.html

  • CVEs
    • CVE-2024-21131
    • CVE-2024-21138
    • CVE-2024-21140
    • CVE-2024-21144
    • CVE-2024-21145
    • CVE-2024-21147
  • Security fixes
    • JDK-8314794: Improve UTF8 String supports
    • JDK-8319859: Better symbol storage
    • JDK-8320097: Improve Image transformations
    • JDK-8320548: Improved loop handling
    • JDK-8322106: Enhance Pack 200 loading
    • JDK-8323231: Improve array management
    • JDK-8323390: Enhance mask blit functionality
    • JDK-8324559: Improve 2D image handling
    • JDK-8325600: Better symbol storage
  • Other changes
    • JDK-8025439: [TEST BUG] [macosx] PrintServiceLookup.lookupPrintServices doesn't work properly since jdk8b105
    • JDK-8069389: CompilerOracle prefix wildcarding is broken for long strings
    • JDK-8159454: [TEST_BUG] javax/swing/ToolTipManager/7123767/bug7123767.java: number of checked graphics configurations should be limited
    • JDK-8159690: [TESTBUG] Mark headful tests with @key headful.
    • JDK-8198321: javax/swing/JEditorPane/5076514/bug5076514.java fails
    • JDK-8203691: [TESTBUG] Test /runtime/containers/cgroup/PlainRead.java fails
    • JDK-8205407: [windows, vs<2017] C4800 after 8203197
    • JDK-8235834: IBM-943 charset encoder needs updating
    • JDK-8239965: XMLEncoder/Test4625418.java fails due to "Error: Cp943 - can't read properly"
    • JDK-8240756: [macos] SwingSet2:TableDemo:Printed Japanese characters were garbled
    • JDK-8256152: tests fail because of ambiguous method resolution
    • JDK-8258855: Two tests sun/security/krb5/auto/ReplayCacheTestProc.java and ReplayCacheTestProcWithMD5.java failed on OL8.3
    • JDK-8262017: C2: assert(n != __null) failed: Bad immediate dominator info.
    • JDK-8268916: Tests for AffirmTrust roots
    • JDK-8278067: Make HttpURLConnection default keep alive timeout configurable
    • JDK-8291226: Create Test Cases to cover scenarios for JDK-8278067
    • JDK-8291637: HttpClient default keep alive timeout not followed if server sends invalid value
    • JDK-8291638: Keep-Alive timeout of 0 should close connection immediately
    • JDK-8293562: KeepAliveCache Blocks Threads while Closing Connections
    • JDK-8303466: C2: failed: malformed control flow. Limit type made precise with MaxL/MinL
    • JDK-8304074: [JMX] Add an approximation of total bytes allocated on the Java heap by the JVM
    • JDK-8313081: MonitoringSupport_lock should be unconditionally initialized after 8304074
    • JDK-8315020: The macro definition for LoongArch64 zero build is not accurate.
    • JDK-8316138: Add GlobalSign 2 TLS root certificates
    • JDK-8318410: jdk/java/lang/instrument/BootClassPath/BootClassPathTest.sh fails on Japanese Windows
    • JDK-8320005: Allow loading of shared objects with .a extension on AIX
    • JDK-8324185: [8u] Accept Xcode 12+ builds on macOS
    • JDK-8325096: Test java/security/cert/CertPathBuilder/akiExt/AKISerialNumber.java is failing
    • JDK-8325927: [8u] Backport of JDK-8170552 missed part of the test
    • JDK-8326686: Bump update version of OpenJDK: 8u422
    • JDK-8327440: Fix "bad source file" error during beaninfo generation
    • JDK-8328809: [8u] Problem list some CA tests
    • JDK-8328825: Google CAInterop test failures
    • JDK-8329544: [8u] sun/security/krb5/auto/ReplayCacheTestProc.java cannot find the testlibrary
    • JDK-8331791: [8u] AIX build break from JDK-8320005 backport
    • JDK-8331980: [8u] Problem list CAInterop.java#certignarootca test
    • JDK-8335552: [8u] JDK-8303466 backport to 8u requires 3 ::Identity signature fixes
编辑页面 (opens new window)

← 用户手册 用户手册→

  • 浅色模式