java程序性能优化实战pdf下载(安博士讲堂 | 优化指南-释放 Java 更高性能)java教程 / Java Web应用程序性能调优...

wufei123 发布于 2024-05-23 阅读(16)

概述在过去的十年中,Java 已经成为最流行的云编程语言之一Hadoop、Cassandra 和 Kafka 等流行的云应用程序都使用 Java 语言和框架Java 是一种通用的面向对象语言,被设计为 Write Once Run Anywhere,它依赖于一个 Java 虚拟机(JVM)来将字节码转换为特定应用程序所运行的体系结构的机器代码。

显然,JVM 在运行时生成的代码质量对应用程序性能至关重要本指南描述了在 Ampere® Altra® 系列处理器上的 Java 支持状态,提供了一种构建 OpenJDK 的方法,并比较了不同 OpenJDK 版本和二进制源代码的性能

01Ampere Altra 系列处理器和 AARCH64 架构支持 JAVA 吗?OpenJDK 是官方的参考 JVM 实现OpenJDK 是自由开源软件(FOSS),被大多数 Java 开发人员使用,并且是大多数 Linux 发行版的默认 JVM。

AArch64 移植已经是 OpenJDK 项目的一部分了(见下方网址)今天,从Java Development Kit 8 (JDK8)开始,OpenJDK 在 AArch64 上得到了很好的支持https://developers.redhat.com/blog/2021/02/01/how-red-hat-ported-openjdk-to-64-bit-arm-a-community-history

Ampere Altra 和 Ampere® Altra® Max 处理器从头开始为云而设计,为云原生应用提供可预测的性能、高可扩展性和出色的电源效率Ampere Altra 计算核心采用 ARMv8 指令集架构(ISA),支持 AArch64 和 AArch32 指令集。

目前,各种 Linux 发行版中包含的 jdk 都支持 Ampere Altra 家族处理器,但 JDK17 等较新的长期支持(LTS)版本可以提供明显更好的性能02从哪里可以获取 OPENJDK?用于 Ampere Altra 系列处理器的 OpenJDK 二进制文件可以从几个来源获得。

Linux 发行版通过各自的包存储库提供 OpenJDKAdoptium 是预构建 OpenJDK AArch64 二进制文件的另一个来源OpenJDK 有许多发布版本,但只有表 1 中列出的版本具有 LTS 发布限定符(LTS release qualifier)。

不同的 OpenJDK 发行版可能提供表1所示的生命终止日期(End of Life)

表 1:OpenJDK LTS更多信息请参见下方网址https://access.redhat.com/articles/1299013https://adoptopenjdk.net/support.html

03如何构建 OPENJDK?Linux 发行版提供了不同的方式来安装 OpenJDK,例如 yum 存储库用于 RHEL 和 CentOS, apt 存储库用于 Ubuntu 或 Debian对于自定义构建 OpenJDK,本节列出了如何从源代码构建 OpenJDK 的推荐步骤。

在构建 OpenJDK 时建议使用 GCC。不同的 GCC 版本有不同的 AArch64 选项,如表 2 所示。

表 2:GCC Options构建 OpenJDK 用到了一下配置和选项:bash configure --with-alsa=/usr --with-alsa-lib=/usr/lib64 --with-cacerts-file=/etc/pki/java/cacerts --with-cups=/usr --with-debug-level=release --with-native-debug-symbols=none --with-extra-cflags=

"-pipe -fPIC -DPIC -Wl,-rpath=/usr/lib64 -L/usr/lib64 -mcpu=neoverse-n1" --with-extra-cxxflags="-pipe -fPIC -DPIC -Wl,-rpath=/usr/lib64 -L/usr/lib64 -mcpu=neoverse-n1"

--with-extra-ldflags="-Wl,-rpath=/usr/lib64 -L/usr/lib64" --with-stdc++lib=dynamic --with-target-bits=

64 --with-zlib=system --x-includes=/usr/include --x-libraries=/usr/lib64 --with-boot-jdk= --prefix=

make images make install04性能的影响因素让我们来评估一些通过基本调优就可能实现的性能改进我们在基于 Ampere Altra q80 -30 的服务器上使用 SPECjbb2015,这是一种在复合模式下流行的标准化 Java 基准测试。

系统配置如表 3 所示:

表 3:System Configuration评估中使用了如下的 OpenJDK 选项:-Xms130560m -Xmx130560m -Xmn123g -XX:SurvivorRatio=39 -XX:ObjectAlignmentInBytes=

32 -XX:TargetSurvivorRatio=95 -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:MetaspaceSize=

64m -server -XX:+AlwaysPreTouch -XX:-UseAdaptiveSizePolicy -XX:-UseCountedLoopSafepoints -XX:-UsePerfData -XX:+PrintFlagsFinal -XX:+UseTransparentHugePages -XX:+UseParallelGC -XX:ParallelGCThreads=

80 -XX:AllocatePrefetchDistance=512 -XX:AllocatePrefetchLines=4 -XX:InlineSmallCode=2k -XX:TypeProfileWidth=

4 -XX:SoftwarePrefetchHintDistance=128 -XX:+AvoidUnalignedAccesses -XX:BlockZeroingLowLimit=64K -XX:+UseBlockZeroing -XX:-UseSIMDForArrayEquals -XX:+UseSIMDForMemoryOps

这些是 SPECjbb 的属性:-Dspecjbb.customerDriver.threads=64 -Dspecjbb.customerDriver.threads.service=64 -Dspecjbb.customerDriver.threads.probe=

64 -Dspecjbb.customerDriver.threads.saturate=96 -Dspecjbb.forkjoin.workers=80 -Dspecjbb.forkjoin.workers.Tier1=

80 -Dspecjbb.forkjoin.workers.Tier2=1 -Dspecjbb.forkjoin.workers.Tier3=16 -Dspecjbb.comm.connect.selector.runner.count=

4 -Dspecjbb.controller.type=HBIR_RT -Dspecjbb.controller.port=24000*注*:我们的测试并不是为了达到绝对的最佳性能,而是为了研究使用不同的编译器选项和版本来提高性能。

以下是相同 OpenJDK 版本的三个源代码:CentOS repositoryAdoptium prebuilt binarySelf-built binary使用“如何构建 OpenJDK”一节中描述的方法从 Adoptium 源代码构建自建(self-built)二进制文件。

表 4 列出了用于这些二进制文件的 JDK 提供程序和 GCC 版本

表 4:JDK Providers and GCC Versions使用 SPECjbb2015 Composite Max-jOPS 作为性能指标,以 centos 提供的 JDK8 数据作为基线,图 1 显示了来自不同来源的 JDK8 和 JDK11 的性能。

图 1:SPECjbb2015 JDK8 and JDK11 Performance from Various Sources对于特定的 OpenJDK 版本,最新的 centos 提供的二进制文件、Adoptium 二进制文件和自构建(self-built)二进制文件的性能相似,这表明 OpenJDK 社区对 AArch64 和 Ampere Altra 系列处理器的支持已经非常友好。

比较来自同一源代码(centos 提供的二进制)的不同 OpenJDK 版本,OpenJDK17 是 Ampere Altra 系列处理器上性能最好的版本图 2 显示,从 JDK8 到 JDK11, Max-jOPS 提高了 6%,从 JDK8 到 JDK17 提高了 12%。

图 2:Performance Across OpenJDK Versions表 4 列出并比较了不同 JDK 版本上特定于 aarch64 的 OpenJDK 选项使用此命令可以获取这些选项:java -XX:+PrintFlagsFinal -version。

表 5:OpenJDK AArch64 options因为 Ampere Altra 系列处理器功能上已经支持了原子操作和 crc32 的实现,在使用 Altra 和 Altra Max 处理器的进行性能评估时,UseLSE 和 UseCRC32 选项会自动启用。

这意味着,即使没有像“-march=armv8.2-a”或“-mcpu=neoverse-n1”这样的编译选项,OpenJDK 也可以为 Ampere Altra 系列处理器生成优化的代码结论OpenJDK 是 Java 平台的自由/开源软件实现,是云计算中实际使用的 JDK。

在本文中,我们看到 OpenJDK  可以无缝地移植到 Ampere Altra 系列处理器上,并且在其上有着非常出色的性能OS 发行版和 Adoptium 提供的最新预构建( pre-built)二进制文件的性能与从源代码构建 JDK 一样。

也就是说,使用最新的OpenJDK LTS 版本 17 就可以获得更高的性能。像往常一样,我们建议使用更新版本的 GCC 编译器和针对体系架构的选项从源代码构建 OpenJDK。

参考资料

https://en.wikipedia.org/wiki/Java_(programming_language)

https://blogs.oracle.com/javamagazine/post/java-arm64-aarch64-development

https://developers.redhat.com/blog/2021/02/01/how-red-hat-ported-openjdk-to-64-bit-arm-a-community-history

https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/java-performance-on-neoverse-n1

https://github.com/aws/aws-graviton-getting-started/blob/main/java.md欢迎联系我们,了解更多资讯联系电话:021-64338766官网:

amperecomputing.com/cn/或在官微后台留言,我们会尽快回复您热文回顾媒体视角|Ampere的192核云原生CPU首度导入Chiplet设计安博士讲堂 | 优化指南-FFmpeg 构建和优化

Ampere 云原生处理器:打破传统限制,助力数据中心效率劲升三倍!关于 Ampere ComputingAmpere Computing 是一家现代化半导体企业,致力于塑造云计算的未来,并推出了世界上首款云原生处理器。

为可持续云而生,Ampere 云原生处理器兼具最高性能和最佳每瓦性能,助力加速多种云计算应用的交付,为云提供行业领先的性能、能效和可扩展性欲了解更多信息,请访问 https://amperecomputing.com。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻32406