日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java即时编译:不仅仅是一个流行词

發(fā)布時(shí)間:2023/12/3 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java即时编译:不仅仅是一个流行词 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近的Java生產(chǎn)性能問題迫使我重新審視并真正欣賞Java VM即時(shí)(JIT)編譯器。 大多數(shù)Java開發(fā)人員和支持人員都聽說過這種JVM運(yùn)行時(shí)性能優(yōu)化,但是有多少人真正理解并欣賞它的好處?

本文將與您分享在添加新的虛擬服務(wù)器(容量改進(jìn)和水平擴(kuò)展項(xiàng)目)之后我所涉及的故障排除練習(xí)。

有關(guān)JIT的更深入介紹,我推薦以下文章:

  • ##即時(shí)編譯: http : //en.wikipedia.org/wiki/Just-in-time_compilation
  • ## Java HotSpot性能引擎體系結(jié)構(gòu): http : //www.oracle.com/technetwork/java/whitepaper-135217.html
  • ##了解即時(shí)編譯和優(yōu)化: http : //docs.oracle.com/cd/E15289_01/doc.40/e15058/underst_jit.htm
  • ## JIT編譯器如何優(yōu)化代碼: http : //pic.dhe.ibm.com/infocenter/java7sdk/v7r0/index.jsp?topic=%2Fcom.ibm.java.zos.70.doc%2Fdiag%2Funderstanding% 2Fjit_overview.html

JIT編譯概述

JIT編譯本質(zhì)上是一個(gè)在運(yùn)行時(shí)提高Java應(yīng)用程序性能的過程。

下圖說明了不同的JVM層和交互。 它描述了以下高級(jí)過程:

  • Java編譯器將Java源文件編譯為平臺(tái)無關(guān)的字節(jié)碼或Java類文件。
  • 在觸發(fā)Java應(yīng)用程序之后,JVM在運(yùn)行時(shí)加載編譯的類,并通過Java解釋器執(zhí)行適當(dāng)?shù)挠?jì)算語義。
  • 啟用JIT后,JVM將分析Java應(yīng)用程序方法調(diào)用并將字節(jié)碼(在達(dá)到某些內(nèi)部閾值之后)編譯為本機(jī)的,更有效的機(jī)器代碼。 通常,最繁忙的方法調(diào)用首先確定JIT進(jìn)程的優(yōu)先級(jí)。
  • 將此類方法調(diào)用編譯為機(jī)器代碼后,JVM將直接執(zhí)行它,而不是“解釋”它。
  • 隨著時(shí)間的流逝,上述過程導(dǎo)致了運(yùn)行時(shí)性能的提高。
  • 案例分析

    現(xiàn)在這里是我之前提到的項(xiàng)目的背景。 主要目標(biāo)是在生產(chǎn)環(huán)境中添加新的IBM P7 AIX虛擬服務(wù)器(LPAR),以提高平臺(tái)的容量。 查找以下平臺(tái)本身的規(guī)格:

    • Java EE服務(wù)器 : IBM WAS 6.1.0.37和IBM WCC 7.0.1
    • 操作系統(tǒng) :AIX 6.1
    • JDK :IBM J2RE 1.5.0(SR12 FP3 + IZ94331)@ 64位
    • RDBMS :Oracle 10g
    • 平臺(tái)類型 :中間層和批處理

    為了達(dá)到現(xiàn)有的應(yīng)用程序性能水平,購(gòu)買了完全相同的硬件規(guī)格。 還使用與現(xiàn)有產(chǎn)品相同的版本安裝了AIX OS版本和其他IBM軟件。

    為了確保應(yīng)用程序具有相同的性能水平,對(duì)以下各項(xiàng)(清單)均進(jìn)行了驗(yàn)證:

    • 硬件規(guī)格(#CPU內(nèi)核,物理RAM,SAN…)。
    • 操作系統(tǒng)版本和補(bǔ)丁程序級(jí)別; 包括AIX內(nèi)核參數(shù)。
    • IBM WAS和IBM WCC版本,補(bǔ)丁程序級(jí)別; 包括調(diào)整參數(shù)。
    • IBM JRE版本,補(bǔ)丁程序級(jí)別和調(diào)整參數(shù)(啟動(dòng)參數(shù), Java堆大小 ……)。
    • 還正確評(píng)估了網(wǎng)絡(luò)連接性和性能。

    新的生產(chǎn)服務(wù)器構(gòu)建完成后,將執(zhí)行功能測(cè)試,該測(cè)試還確認(rèn)了聯(lián)機(jī)和批處理應(yīng)用程序的正確行為。

    但是,在生產(chǎn)運(yùn)營(yíng)的第一天就發(fā)現(xiàn)了主要的性能問題。 您將在下面找到所觀察到的性能問題的摘要矩陣。

    生產(chǎn)服務(wù)器
    運(yùn)行時(shí)間
    處理量(#個(gè)訂單)
    中央處理器 %
    (平均)
    中間件健康
    現(xiàn)有服務(wù)器 10個(gè)小時(shí) 25萬(基線) 20% 健康
    *新*服務(wù)器 10個(gè)小時(shí) 5萬-500% 80%+ 400% 高線程利用率

    從上面的視圖中可以看到,性能結(jié)果在生產(chǎn)的第一天就非常糟糕。 與現(xiàn)有生產(chǎn)服務(wù)器相比,新生產(chǎn)服務(wù)器不僅處理了更少的訂單,而且物理資源利用率(例如CPU%)也要高得多。

    考慮到確保新服務(wù)器的構(gòu)建與現(xiàn)有服務(wù)器完全相同所花費(fèi)的時(shí)間,這種情況令人感到困惑。 那時(shí),另一個(gè)核心團(tuán)隊(duì)參與進(jìn)來,以執(zhí)行額外的故障排除并確定性能問題的根源。

    故障排除:尋找罪魁禍?zhǔn)住?/h2>

    故障排除團(tuán)隊(duì)分為兩部分,以專注于以下項(xiàng)目:

    • 從IBM WAS容器中識(shí)別CPU%的來源,并將CPU占用空間與現(xiàn)有生產(chǎn)服務(wù)器進(jìn)行比較。
    • 在現(xiàn)有生產(chǎn)服務(wù)器和新生產(chǎn)服務(wù)器之間執(zhí)行更多數(shù)據(jù)和文件比較。

    為了了解CPU%的來源,我們確實(shí)從運(yùn)行IBM WAS和IBM WCC的IBM JVM中對(duì)每個(gè)線程執(zhí)行了AIX CPU分析 。 從下面的屏幕快照中可以看到,發(fā)現(xiàn)許多線程各自使用5-20%。 在現(xiàn)有生產(chǎn)服務(wù)器上執(zhí)行的相同分析確實(shí)顯示出更少的線程數(shù),CPU占用率始終在5%左右。

    結(jié)論:

    相同類型的業(yè)務(wù)流程使用的CPU是現(xiàn)有生產(chǎn)服務(wù)器的3-4倍。

    為了了解執(zhí)行的處理類型,每個(gè)線程數(shù)據(jù)在CPU的同時(shí)捕獲了JVM線程轉(zhuǎn)儲(chǔ) 。 現(xiàn)在,在查看了JVM線程轉(zhuǎn)儲(chǔ)(Java內(nèi)核)之后,我們意識(shí)到的第一件事就是JIT確實(shí)被禁用了! 通過從正在運(yùn)行的JVM進(jìn)程中運(yùn)行java –version命令也可以確認(rèn)該問題。

    這個(gè)發(fā)現(xiàn)非常重要,特別是考慮到在現(xiàn)有生產(chǎn)服務(wù)器上啟用了JIT。 大約在同一時(shí)間,負(fù)責(zé)比較服務(wù)器的另一個(gè)團(tuán)隊(duì)最終發(fā)現(xiàn)了用于啟動(dòng)應(yīng)用程序的AIX用戶的環(huán)境變量之間的差異。 早期的差距分析漏掉了這種比較練習(xí)。 他們發(fā)現(xiàn)新的AIX生產(chǎn)服務(wù)器具有以下額外條目:

    JAVA_COMPILER=NONE

    根據(jù)IBM文檔 ,添加此類環(huán)境變量是禁用 JIT的方法之一。

    復(fù)雜的根本原因分析,簡(jiǎn)單的解決方案

    為了了解在我們的環(huán)境中禁用JIT的影響,您必須了解其含義。 禁用JIT本質(zhì)上意味著整個(gè)JVM現(xiàn)在都在解釋模式下運(yùn)行。 對(duì)于我們的應(yīng)用程序,以完全解釋模式運(yùn)行不僅會(huì)大大降低應(yīng)用程序吞吐量,而且還會(huì)增加服務(wù)器CPU利用率的壓力點(diǎn),因?yàn)槊總€(gè)請(qǐng)求/線程占用的CPU數(shù)量是使用JIT執(zhí)行的請(qǐng)求的3-4倍(請(qǐng)記住,當(dāng)使用JIT時(shí)啟用后,JVM將直接對(duì)機(jī)器/本機(jī)代碼執(zhí)行許多調(diào)用)。

    如預(yù)期的那樣,除去此環(huán)境變量以及重新啟動(dòng)受影響的JVM進(jìn)程確實(shí)解決了問題并恢復(fù)了性能級(jí)別。

    評(píng)估您的應(yīng)用程序的JIT收益

    我希望您對(duì)這個(gè)案例研究和對(duì)JVM JIT編譯過程的簡(jiǎn)短回顧表示贊賞。 為了了解不對(duì)Java應(yīng)用程序使用JIT的影響,建議您進(jìn)行以下實(shí)驗(yàn):

    • 啟用JIT并為您的應(yīng)用程序生成負(fù)載,并捕獲一些基準(zhǔn)數(shù)據(jù),例如CPU%,響應(yīng)時(shí)間,#個(gè)請(qǐng)求等。
    • 禁用JIT。
    • 重做相同的測(cè)試并比較結(jié)果。

    參考: Java即時(shí)編譯:在Java EE支持模式博客上, 不僅僅是 JCG合作伙伴 Pierre Hugues Charbonneau 的時(shí)髦 詞匯 。

    翻譯自: https://www.javacodegeeks.com/2013/07/java-just-in-time-compilation-more-than-just-a-buzzword.html

    總結(jié)

    以上是生活随笔為你收集整理的Java即时编译:不仅仅是一个流行词的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。