产品白皮书
# 引言
# 概述
JDK ( Java Development Kit ) 是 Java 语言的软件开发工具包,是 Java 的核心,包含了 Java 的运行环境 ( JVM ) 和 Java 系统类库以及 Java 工具,为 Java 程序的开发、编译和运行提供全生命支持。JDK 是是 JavaSE(Java Platform, Standard Edition)规范标准的实现,也是 Java EE / JakartaEE 和 Java ME 编程的基础。
# 面向的读者
本文面向技术决策者和企业架构师、应用开发工程师及应用系统运维开发工程师。
# 产品介绍
# 产品概述
Apusic JDK 是一款高性能、生产环境就绪的OpenJDK发行版本,基于华为毕昇 JDK发展而来,完全兼容开源 OpenJDK,支持多种运行平台,适合微服务、云原生应用、大数据等场景。
# 产品介绍
Apusic JDK 是一款高性能、生产环境就绪的OpenJDK发行版本,完全兼容开源 OpenJDK,基于华为毕昇 JDK发展而来,支持多种运行平台,具备更快的云应用启动速度,更好的性能以及提供更为便捷的分析、诊断工具,适合微服务、云原生应用、大数据等实际应用场景,提供最优的 Java 生产环境及解决方案。此外,Apusic JDK 也是 Apusic 应用服务器的运行环境,适配大量 Java 应用程序,解决了业务实际运行中遇到的多个问题,能够为 Java 应用程序提供一个安全、稳定、可扩展、高性能的运行环境。
# 面向的客户
使用 Java 开发的应用程序
# 产品架构
# 总体架构
Apusic JDK 功能架构主要包含 Java 语言规范、Java 类库( JavaSE API )、Java 虚拟机 ( JVM )、Java 编译器 ( javac) 和一系列开发工具构成。

# 关键技术特性
# 支持 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堆扫描效率、减少扫描时间。
# 兼容性
广泛兼容国产化操作系统和芯片
# 芯片架构
- 鲲鹏
- 飞腾
- 海光
- 海思
# Linux系统
- 国产Linux操作系统:麒麟操作系统、统信UOS、深度Linux、优麒麟、红旗Linux、中标麒麟、华为欧拉、中科方德、凝思等
- RedHat 系列
- CentOS 系列
- Ubuntu 系列
- Suse Linux 系列