日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
解析JVM和JIT診斷技術(shù)的用法

在任何給定的時(shí)刻,JVM進(jìn)程包含一些可執(zhí)行文件和一些使用JIT編譯的代碼,它們被動(dòng)態(tài)鏈接到JVM中的MMI方法的封裝程序上。JIT編譯的本地機(jī)器代碼被放置到JVM本地?cái)?shù)據(jù)內(nèi)存段中,這樣就可以增加JVM進(jìn)程的本地內(nèi)存占用,并且MMI封裝程序被修改為指向編譯后的代碼。

成都創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),許昌網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:許昌等地區(qū)。許昌做網(wǎng)站價(jià)格咨詢:18980820575

JIT診斷

本節(jié)將介紹在問題發(fā)生時(shí)用來調(diào)試和診斷IBM JVM的JIT和MMI的技術(shù)。上一節(jié)簡要介紹了JIT,它是IBM JVM的一個(gè)基本部分。

在任何給定的時(shí)刻,JVM進(jìn)程包含一些可執(zhí)行文件和一些使用JIT編譯的代碼,它們被動(dòng)態(tài)鏈接到JVM中的MMI方法的封裝程序上。JIT編譯的本地機(jī)器代碼被放置到JVM本地?cái)?shù)據(jù)內(nèi)存段中,這樣就可以增加JVM進(jìn)程的本地內(nèi)存占用,并且MMI封裝程序被修改為指向編譯后的代碼。

因此,JIT對于Java程序的執(zhí)行流程會(huì)產(chǎn)生很大的影響。

在將程序從一個(gè)平臺(tái)上遷移到另外一個(gè)平臺(tái)上碰到的問題如下:

死鎖掛起

一直產(chǎn)生不正確的結(jié)果

結(jié)果不一致

不正常結(jié)束

無限循環(huán)

內(nèi)存泄漏

對問題原因要考慮的第一件事情是JIT。

盡快在判斷問題原因時(shí),確定JIT是否是問題的根源非常重要,這是由于3個(gè)原因:

◆問題可能是由于JIT在JVM中給定的活動(dòng)角色而引起的。

◆JIT調(diào)試與其他類型的問題判斷技術(shù)有很大的不同。

◆JIT調(diào)試過程可能會(huì)非常耗費(fèi)時(shí)間,而且非常復(fù)雜,通常需要高級(jí)的專門技術(shù)。#p#

確定是否是JIT問題

在某些情況下,從問題的特性可以很清楚地看出就是JIT的問題。例如,在JVM終止時(shí)帶有Javadump(在Linux上,Javadump的文件名的格式為javacore.YYYYMMDD.HHMMSS.PID.txt)或Linuxcore文件的情況下,從Javadump中的跟蹤信息或gdb對Java可執(zhí)行文件和core文件的輸出信息中,可以很清楚地判斷出JIT就是產(chǎn)生問題的原因。在某些情況下,會(huì)直接顯示導(dǎo)致JVM進(jìn)程死亡的信號(hào)是在libjitc.so中接收到的。在另外一些情況下,在JVM進(jìn)程的代碼中,但是在該進(jìn)程的已編譯代碼之外,會(huì)產(chǎn)生崩潰或掛起,這可以說明問題是由于JIT編譯的代碼產(chǎn)生的。

然而,在大部分情況下,并沒有清晰的跡象表明JIT是否是問題的源頭。因此,給定JIT的重要性后,在問題判斷過程中的第一個(gè)步驟應(yīng)該是禁用JIT,除非這顯然不是一個(gè)與JIT相關(guān)的問題。即使在有跡象表明JIT就是問題的原因的情況下,最好也通過禁用JIT進(jìn)行一下驗(yàn)證,并重新運(yùn)行一下禁用了JIT的程序。

要禁用JIT,首先請檢查一下當(dāng)前環(huán)境變量JAVA_COMPILER的設(shè)置,然后將其設(shè)置為NONE。例如,對于BourneAgainShell(bash)或Kornshell(ksh),設(shè)置如下:exportJAVA_COMPILER=NONE

對于csh,設(shè)置如下:

 
 
 
  1. setenvJAVA_COMPILERNONE  
  2.  

另外一種禁用JIT的方法是向java命令傳遞-D參數(shù),將java.compiler設(shè)置為NONE,從而覆蓋默認(rèn)的環(huán)境變量置

 
 
 
  1. java-Djava.compiler=NONE 
  2.  

JIT默認(rèn)是被啟用的。要驗(yàn)證JIT是否被啟用了,可以使用java命令的-version選項(xiàng):java-version

如果沒有啟用JIT,就會(huì)顯示一個(gè)包含如下內(nèi)容的消息:

 
 
 
  1. JITdisabled  
  2.  

如果啟用了JIT,就會(huì)顯示一個(gè)包含如下內(nèi)容的消息:

 
 
 
  1. JITenabled:jitc  
  2.  

如果指定了JAVA_COMPILER=""或-Djava.compiler="",那就禁用了JIT。如果JAVA_COMPILER沒有設(shè)置,如下:

 
 
 
  1. unsetJAVA_COMPILER  
  2.  

 那么JIT編譯器就啟用了。

再次運(yùn)行一下程序,看一下禁用JIT之后問題是否重現(xiàn)。如果問題可以重現(xiàn),那么這就不是一個(gè)與JIT有關(guān)的問題。如果在禁用JIT之后問題就不存在了,那么這就可能是一個(gè)與JIT有關(guān)的問題。在禁用JIT之后問題就不再出現(xiàn)的現(xiàn)象并不意味著JIT編譯器就是問題的原因。例如,高度線程化且時(shí)間相關(guān)的程序中的方法在編譯后和解釋時(shí)的運(yùn)行速度可能會(huì)不同,因此Java代碼中的邏輯錯(cuò)誤只會(huì)在編譯代碼之后才會(huì)出現(xiàn)。

要啟用JIT,請將JAVA_COMPILER設(shè)置為jitc,或者使用下面的命令行來切換JIT編譯器:

 
 
 
  1. java-Djava.compiler=jitc 
  2.  

 或者取消JAVA_COMPILER環(huán)境變量的設(shè)置,或者從傳遞給java命令的選項(xiàng)中刪除-Djava.compiler選項(xiàng)。


分享名稱:解析JVM和JIT診斷技術(shù)的用法
鏈接分享:http://www.5511xx.com/article/dpjeocg.html