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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

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

java

java即时编译器_Java即时编译:不仅仅是一个流行词

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

java即時(shí)編譯器

最近的Java生產(chǎn)性能問(wèn)題迫使我重新審視并真正欣賞Java VM即時(shí)(JIT)編譯器。 大多數(shù)Java開(kāi)發(fā)人員和支持人員都聽(tīng)說(shuō)過(guò)這種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)用程序性能的過(guò)程。

下圖說(shuō)明了不同的JVM層和交互。 它描述了以下高層過(guò)程:

  • Java編譯器將Java源文件編譯為平臺(tái)無(wú)關(guān)的字節(jié)碼或Java類(lèi)文件。
  • 觸發(fā)Java應(yīng)用程序后,JVM將在運(yùn)行時(shí)加載已編譯的類(lèi),并通過(guò)Java解釋器執(zhí)行適當(dāng)?shù)挠?jì)算語(yǔ)義。
  • 啟用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í)間的流逝,上述過(guò)程可改善運(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)類(lèi)型 :中間層和批處理

    為了達(dá)到現(xiàn)有的應(yīng)用程序性能水平,購(gòu)買(mǎi)了完全相同的硬件規(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)了主要的性能問(wèn)題。 您將在下面找到所觀(guān)察到的性能問(wèn)題的摘要矩陣。

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

    從上面的視圖中可以看到,性能結(jié)果在生產(chǎn)的第一天就非常災(zāi)難性。 與現(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)來(lái),以執(zhí)行額外的故障排除并確定性能問(wèn)題的根源。

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

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

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

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

    結(jié)論:

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

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

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

    JAVA_COMPILER=NONE

    根據(jù)IBM文檔 ,添加此類(lèi)環(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)求/線(xiàn)程占用的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í)解決了問(wèn)題并恢復(fù)了性能級(jí)別。

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

    我希望您對(duì)這個(gè)案例研究和對(duì)JVM JIT編譯過(guò)程的簡(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

    java即時(shí)編譯器

    總結(jié)

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

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