0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

優(yōu)化指南:釋放Java更高性能

安晟培半導(dǎo)體 ? 來源:安晟培半導(dǎo)體 ? 作者:安晟培半導(dǎo)體 ? 2023-06-29 18:19 ? 次閱讀

概述

在過去的十年中,Java 已經(jīng)成為最流行的云編程語言之一。Hadoop、Cassandra 和 Kafka 等流行的云應(yīng)用程序都使用 Java 語言和框架。Java 是一種通用的面向?qū)ο笳Z言,被設(shè)計(jì)為 Write Once Run Anywhere,它依賴于一個(gè) Java 虛擬機(jī)(JVM)來將字節(jié)碼轉(zhuǎn)換為特定應(yīng)用程序所運(yùn)行的體系結(jié)構(gòu)的機(jī)器代碼。顯然,JVM 在運(yùn)行時(shí)生成的代碼質(zhì)量對(duì)應(yīng)用程序性能至關(guān)重要。

本指南描述了在 Ampere Altra 系列處理器上的 Java 支持狀態(tài),提供了一種構(gòu)建 OpenJDK 的方法,并比較了不同OpenJDK 版本和二進(jìn)制源代碼的性能。

01Ampere Altra 系列處理器AARCH64架構(gòu)支持 JAVA 嗎?

OpenJDK 是官方的參考 JVM 實(shí)現(xiàn)。OpenJDK 是自由開源軟件(FOSS),被大多數(shù) Java 開發(fā)人員使用,并且是大多數(shù) Linux 發(fā)行版的默認(rèn) JVM。AArch64 移植已經(jīng)是 OpenJDK 項(xiàng)目的一部分了(見下方網(wǎng)址)。今天,從Java Development Kit 8 (JDK8)開始,OpenJDK 在 AArch64 上得到了很好的支持。

Ampere Altra 和 AmpereAltraMax 處理器從頭開始為云而設(shè)計(jì),為云原生應(yīng)用提供可預(yù)測(cè)的性能、高可擴(kuò)展性和出色的電源效率。Ampere Altra 計(jì)算核心采用 ARMv8 指令集架構(gòu)(ISA),支持 AArch64 和 AArch32 指令集。目前,各種 Linux 發(fā)行版中包含的 jdk 都支持 Ampere Altra 家族處理器,但 JDK17 等較新的長期支持(LTS)版本可以提供明顯更好的性能。

02從哪里可以獲取 OPENJDK?

用于 Ampere Altra 系列處理器的 OpenJDK 二進(jìn)制文件可以從幾個(gè)來源獲得。Linux 發(fā)行版通過各自的包存儲(chǔ)庫提供 OpenJDK。Adoptium 是預(yù)構(gòu)建 OpenJDK AArch64 二進(jìn)制文件的另一個(gè)來源。

OpenJDK 有許多發(fā)布版本,但只有表 1 中列出的版本具有 LTS 發(fā)布限定符(LTS release qualifier)。不同的 OpenJDK 發(fā)行版可能提供表1所示的生命終止日期(End of Life)。

e3f1e61a-1664-11ee-962d-dac502259ad0.png

表 1:OpenJDK LTS

03如何構(gòu)建 OPENJDK?

Linux 發(fā)行版提供了不同的方式來安裝 OpenJDK,例如 yum 存儲(chǔ)庫用于 RHEL 和 CentOS, apt 存儲(chǔ)庫用于 Ubuntu 或 Debian。

對(duì)于自定義構(gòu)建 OpenJDK,本節(jié)列出了如何從源代碼構(gòu)建 OpenJDK 的推薦步驟。

在構(gòu)建 OpenJDK 時(shí)建議使用 GCC。不同的 GCC 版本有不同的 AArch64 選項(xiàng),如表 2 所示。

e40f608c-1664-11ee-962d-dac502259ad0.png

表 2:GCC Options

構(gòu)建 OpenJDK 用到了一下配置和選項(xiàng):

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 install

04性能的影響因素

讓我們來評(píng)估一些通過基本調(diào)優(yōu)就可能實(shí)現(xiàn)的性能改進(jìn)。我們?cè)诨?Ampere Altra q80 -30 的服務(wù)器上使用 SPECjbb2015,這是一種在復(fù)合模式下流行的標(biāo)準(zhǔn)化 Java 基準(zhǔn)測(cè)試。系統(tǒng)配置如表 3 所示:

e465ba68-1664-11ee-962d-dac502259ad0.png

表 3:System Configuration

評(píng)估中使用了如下的 OpenJDK 選項(xiàng):

-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 

*注*:我們的測(cè)試并不是為了達(dá)到絕對(duì)的最佳性能,而是為了研究使用不同的編譯器選項(xiàng)和版本來提高性能。

以下是相同 OpenJDK 版本的三個(gè)源代碼:

CentOS repository

Adoptium prebuilt binary

Self-built binary

使用“如何構(gòu)建 OpenJDK”一節(jié)中描述的方法從 Adoptium 源代碼構(gòu)建自建(self-built)二進(jìn)制文件。表 4 列出了用于這些二進(jìn)制文件的 JDK 提供程序和 GCC 版本。

e48a6250-1664-11ee-962d-dac502259ad0.png

表 4:JDK Providers and GCC Versions

使用 SPECjbb2015 Composite Max-jOPS 作為性能指標(biāo),以 centos 提供的 JDK8 數(shù)據(jù)作為基線,圖 1 顯示了來自不同來源的 JDK8 和 JDK11 的性能。

e4c3af92-1664-11ee-962d-dac502259ad0.png

圖 1:SPECjbb2015 JDK8 and JDK11 Performance

from Various Sources

對(duì)于特定的 OpenJDK 版本,最新的 centos 提供的二進(jìn)制文件、Adoptium 二進(jìn)制文件和自構(gòu)建(self-built)二進(jìn)制文件的性能相似,這表明 OpenJDK 社區(qū)對(duì) AArch64 和 Ampere Altra 系列處理器的支持已經(jīng)非常友好。

比較來自同一源代碼(centos 提供的二進(jìn)制)的不同 OpenJDK 版本,OpenJDK17 是 Ampere Altra 系列處理器上性能最好的版本。圖 2 顯示,從 JDK8 到 JDK11, Max-jOPS 提高了 6%,從 JDK8 到 JDK17 提高了 12%。

e4d4df9c-1664-11ee-962d-dac502259ad0.png

圖 2:Performance Across OpenJDK Versions

表 4 列出并比較了不同 JDK 版本上特定于 aarch64 的 OpenJDK 選項(xiàng)。使用此命令可以獲取這些選項(xiàng):

java -XX:+PrintFlagsFinal -version

e54ae052-1664-11ee-962d-dac502259ad0.png

表 5:OpenJDK AArch64 options

因?yàn)?Ampere Altra 系列處理器功能上已經(jīng)支持了原子操作和 crc32 的實(shí)現(xiàn),在使用 Altra 和 Altra Max 處理器的進(jìn)行性能評(píng)估時(shí),UseLSE 和 UseCRC32 選項(xiàng)會(huì)自動(dòng)啟用。

這意味著,即使沒有像“-march=armv8.2-a”或“-mcpu=neoverse-n1”這樣的編譯選項(xiàng),OpenJDK 也可以為 Ampere Altra 系列處理器生成優(yōu)化的代碼。

結(jié)論

OpenJDK 是 Java 平臺(tái)的自由/開源軟件實(shí)現(xiàn),是云計(jì)算中實(shí)際使用的 JDK。在本文中,我們看到 OpenJDK 可以無縫地移植到 Ampere Altra 系列處理器上,并且在其上有著非常出色的性能。OS 發(fā)行版和 Adoptium 提供的最新預(yù)構(gòu)建( pre-built)二進(jìn)制文件的性能與從源代碼構(gòu)建 JDK 一樣。也就是說,使用最新的OpenJDK LTS 版本 17 就可以獲得更高的性能。像往常一樣,我們建議使用更新版本的 GCC 編譯器和針對(duì)體系架構(gòu)的選項(xiàng)從源代碼構(gòu)建 OpenJDK。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19726

    瀏覽量

    232752
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11416

    瀏覽量

    212268
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2983

    瀏覽量

    106469
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1952

    瀏覽量

    35670
  • Ampere
    +關(guān)注

    關(guān)注

    1

    文章

    80

    瀏覽量

    4636

原文標(biāo)題:安博士講堂 | 優(yōu)化指南-釋放 Java 更高性能

文章出處:【微信號(hào):AmpereComputing,微信公眾號(hào):安晟培半導(dǎo)體】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 0人收藏

    評(píng)論

    相關(guān)推薦

    TI高性能模擬器件在大學(xué)生創(chuàng)新設(shè)計(jì)中的應(yīng)用及選型指南

    TI高性能模擬器件在大學(xué)生創(chuàng)新設(shè)計(jì)中的應(yīng)用及選型指南TI高性能模擬器件在大學(xué)生創(chuàng)新設(shè)計(jì)中的應(yīng)用及選型指南TI高性能模擬器件在大學(xué)生創(chuàng)新設(shè)計(jì)中
    發(fā)表于 10-18 13:33

    詳解java代碼優(yōu)化方法

    性能下降,JDK7之后,可以使用ThreadLocalRandom來獲取隨機(jī)數(shù)44. 靜態(tài)類、單例類、工廠類將它們的構(gòu)造函數(shù)置為private以上是常用的Java代碼優(yōu)化方法,在Java
    發(fā)表于 04-02 15:43

    HBase性能優(yōu)化方法總結(jié)

    讀密集型對(duì)于隨機(jī)讀密集型工作負(fù)載,高效利用緩存和更好地索引會(huì)給HBase系統(tǒng)帶來更高性能2. 順序讀密集型對(duì)于順序讀密集型工作負(fù)載,可以采用不使用緩存的方式減少硬盤訪問次數(shù)來提高性能。3. 寫密集型
    發(fā)表于 04-20 17:16

    MSP430FRx MCU如何實(shí)現(xiàn)更高性能

    通知。此設(shè)計(jì)利用了 FRAM 的快速寫入速度和高壽命 – 但復(fù)雜程度更高。 為了真正優(yōu)化系統(tǒng),需要在 MSP430FR5969 MCU 上運(yùn)行振動(dòng)數(shù)據(jù)頻譜分析,最大限度減少必須無線傳輸?shù)臄?shù)據(jù)。 通過利用
    發(fā)表于 09-10 11:57

    針對(duì)于Java的35 個(gè)代碼性能優(yōu)化總結(jié)

    針對(duì)于Java的35 個(gè)代碼性能優(yōu)化總結(jié) 前言代碼優(yōu)化,一個(gè)很重要的課題??赡苡行┤擞X得沒用,一些細(xì)小的地方有什么好修改的,改與不改對(duì)于代碼的運(yùn)行效率有什么影響呢?這個(gè)問題我是這么考慮
    發(fā)表于 06-19 21:03

    嵌入式Java虛擬機(jī)的性能優(yōu)化技術(shù)

    ——JMO+(JMOplus)的性能優(yōu)化技術(shù)。 在過去的幾年里,Java已經(jīng)在各個(gè)領(lǐng)域得到了廣泛的應(yīng)用,尤其是無線移動(dòng)領(lǐng)域,全球180多個(gè)移動(dòng)運(yùn)營商已經(jīng)推出了Java下載服務(wù)。無線手持
    發(fā)表于 07-18 06:26

    如何使高分辨率A/D轉(zhuǎn)換器獲得更高性能

    A/D轉(zhuǎn)換器最常見的誤差有哪些?如何使高分辨率A/D轉(zhuǎn)換器獲得更高性能?
    發(fā)表于 04-22 06:08

    關(guān)于java性能優(yōu)化的一些細(xì)節(jié)

    優(yōu)化。此舉能夠使性能平均提高50% 。2、盡量重用對(duì)象特別是String對(duì)象的使用,出現(xiàn)字符串連接時(shí)應(yīng)該使用StringBuilder/StringBuffer代替。由于Java虛擬機(jī)不僅要花時(shí)間生成
    發(fā)表于 10-11 09:23

    AutoKernel高性能算子自動(dòng)優(yōu)化工具

    主要由資深HPC工程師(高性能計(jì)算優(yōu)化工程師)進(jìn)行開發(fā),為了加快開發(fā)進(jìn)程,縮短深度學(xué)習(xí)應(yīng)用落地周期,自動(dòng)化算子優(yōu)化是一個(gè)趨勢(shì)。AutoKernel是由OPEN AI LAB提出的高性能
    發(fā)表于 12-14 06:18

    如何在嵌入式設(shè)備上運(yùn)行高性能Java

    如何在嵌入式設(shè)備上運(yùn)行高性能Java
    發(fā)表于 03-28 09:43 ?16次下載

    STC高性能SRAM選型指南

    STC高性能SRAM選型指南 型號(hào) 容量 工作電壓 溫度 速度 封裝
    發(fā)表于 09-24 11:33 ?0次下載

    JAVA優(yōu)化編程

    JAVA優(yōu)化編程
    發(fā)表于 03-19 11:24 ?1次下載

    Java編程指南

    Java編程指南
    發(fā)表于 03-19 11:26 ?3次下載

    大數(shù)據(jù)Java優(yōu)化

    本視頻概述了Java編程語言及其對(duì)企業(yè)應(yīng)用程序的好處。它還強(qiáng)調(diào)了英特爾軟件優(yōu)化與最新的Xeon硅技術(shù)相結(jié)合以提高應(yīng)用程序性能的重要性
    的頭像 發(fā)表于 05-31 16:59 ?1656次閱讀

    使用Arthas火焰圖工具的Java應(yīng)用性能分析和優(yōu)化經(jīng)驗(yàn)

    分享作者在使用Arthas火焰圖工具進(jìn)行Java應(yīng)用性能分析和優(yōu)化的經(jīng)驗(yàn)。
    的頭像 發(fā)表于 10-28 09:27 ?906次閱讀
    使用Arthas火焰圖工具的<b class='flag-5'>Java</b>應(yīng)用<b class='flag-5'>性能</b>分析和<b class='flag-5'>優(yōu)化</b>經(jīng)驗(yàn)

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品