一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

關(guān)于 JVM 命令行標(biāo)志您不知道的 5 件事

 lovespss 2010-10-23

關(guān)于本系列

您覺得自己懂 Java 編程?事實(shí)是,大多數(shù)開發(fā)人員都只領(lǐng)會到了 Java 平臺的皮毛,所學(xué)也只夠應(yīng)付工作。在本 系列 中,Ted Neward 深度挖掘 Java 平臺的核心功能,揭示一些鮮為人知的事實(shí),幫助您解決最棘手的編程困難。

JVM 是多數(shù)開發(fā)人員視為理所當(dāng)然的 Java 功能和性能背后的重負(fù)荷機(jī)器。然而,我們很少有人能理解 JVM 是如何進(jìn)行工作的 — 像任務(wù)分配和垃圾收集、轉(zhuǎn)動線程、打開和關(guān)閉文件、中斷和/或 JIT 編譯 Java 字節(jié)碼,等等。

不熟悉 JVM 將不僅會影響應(yīng)用程序性能,而且當(dāng) JVM 出問題時(shí),嘗試修復(fù)也會很困難。

本期 5 件事 系列 將介紹一些命令行標(biāo)志,您可以使用它們來診斷和調(diào)優(yōu)您的 Java 虛擬機(jī)性能。

1. DisableExplicitGC

我已記不清有多少次用戶要求我就應(yīng)用程序性能問題提供咨詢了,其實(shí)只要跨代碼快速運(yùn)行 grep,就會發(fā)現(xiàn)清單 1 所示的問題 — 原始 java 性能反模式:


清單 1. System.gc();
            // We just released a bunch of objects, so tell the stupid
            // garbage collector to collect them already!
            System.gc();
            

顯式垃圾收集是一個(gè)非常糟糕的主意 — 就像將您和一個(gè)瘋狂的斗牛犬鎖在一個(gè)電話亭里。盡管調(diào)用的語法是依賴實(shí)現(xiàn)的,但如果您的 JVM 正在運(yùn)行一個(gè)分代的垃圾回收器(大多數(shù)是)System.gc(); 強(qiáng)迫 VM 執(zhí)行一個(gè)堆的 “全部清掃”,雖然有的沒有必要。全部清掃比一個(gè)常規(guī) GC 操作要昂貴好幾個(gè)數(shù)量級,這只是個(gè)簡單數(shù)學(xué)問題。

您可以不把我的話放在心上 — Sun 的工程師為這個(gè)特殊的人工錯誤提供一個(gè) JVM 標(biāo)志; -XX:+DisableExplicitGC 標(biāo)志自動將 System.gc() 調(diào)用轉(zhuǎn)換成一個(gè)空操作,為您提供運(yùn)行代碼的機(jī)會,您自己看看 System.gc() 對于整個(gè) JVM 執(zhí)行有害還是有利。


2. HeapDumpOnOutOfMemoryError

您有沒有經(jīng)歷過這樣的情況:JVM 不能使用,不斷拋出 OutOfMemoryError,而您又不能為自己創(chuàng)建調(diào)試器來捕獲它或查看出現(xiàn)了什么問題?像這類偶發(fā)和/或不確定的問題,通常使開發(fā)人員發(fā)瘋。

買者自負(fù)

并不是任何 VM 都支持所有命令行標(biāo)志,Sun/Oracle 的 VM 除外。查明一個(gè)標(biāo)志是否被支持的最好方法是試用它,看它是否正常工作。倘若這些標(biāo)志在技術(shù)上是不支持的,那么,使用它們您要承擔(dān)全部責(zé)任。如果這些標(biāo)志中 的任何一個(gè)使您的代碼、您的數(shù)據(jù)、您的服務(wù)器或您的一切消失得無影無蹤,我、Sun/Oracle 和 IBM? 都將不負(fù)責(zé)任。為以防萬一,建議先在虛擬(非常生產(chǎn))環(huán)境中實(shí)驗(yàn)。

在這個(gè)時(shí)刻您想要的是,在 JVM 消亡之際捕獲堆的一個(gè)快照 — 正好 -XX:+HeapDumpOnOutOfMemoryError 命令可以完成這一操作。

運(yùn)行該命令通知 JVM 拍攝一個(gè) “堆轉(zhuǎn)儲快照”,并將其保存在一個(gè)文件中以便處理,通常使用 jhat 實(shí)用工具(我在 上一篇文章 中介紹過)。您可以使用相應(yīng)的 -XX:HeapDumpPath 標(biāo)志指定到保存文件的實(shí)際路徑。(不管文件保存在哪,務(wù)必確保文件系統(tǒng)和/或 Java 流程必須要有權(quán)限配置,可以在其中寫入。)


3. bootclasspath

定期將一個(gè)類放入類路徑是很有幫助的,這類路徑與庫存 JRE 附帶的類路徑或者以某種方式擴(kuò)展的 JRE 類路徑略有不同。(新 Java Crypto API 提供商就是一個(gè)例子)。如果您想要擴(kuò)展 JRE ,那么您定制的實(shí)現(xiàn)必須可以使用引導(dǎo)程序 ClassLoader,該引導(dǎo)程序可以加載 rt.jar 中的 java.lang.Object 及其所有相關(guān)文件。

盡管您可以 非法打開 rt.jar 并將您的定制實(shí)現(xiàn)或新數(shù)據(jù)包移入其中,但從技術(shù)上您就違反了您下載 JDK 時(shí)同意的協(xié)議了。

相反,使用 JVM 自己的 -Xbootclasspath 選項(xiàng),以及皮膚 -Xbootclasspath/p-Xbootclasspath/a

-Xbootclasspath 使您可以設(shè)置完整的引導(dǎo)類路徑(這通常包括一個(gè)對 rt.jar 的引用),以及一些其他 JDK 附帶的(不是 rt.jar 的一部分)JAR 文件。-Xbootclasspath/p 將值前置到現(xiàn)有 bootclasspath 中,并將 -Xbootclasspath/a 附加到其中。

例如,如果您修改了庫中的 java.lang.Integer,并將修改放在一個(gè)子路徑 mods 下,那么 -Xbootclasspath/a mods 參數(shù)將新 Integer 放在默認(rèn)的參數(shù)前面。


4. verbose

對于虛擬的或任何類型的 Java 應(yīng)用程序,-verbose 是一個(gè)很有用的一級診斷使用程序。該標(biāo)志有三個(gè)子標(biāo)志:gc、classjni

開發(fā)人員嘗試尋找是否 JVM 垃圾收集器發(fā)生故障或者導(dǎo)致性能低下,通常首先要做的就是執(zhí)行 gc。不幸的是,解釋 gc 輸出很麻煩 — 足夠?qū)懸槐緯8愀獾氖?,在命令行中打印的輸出在不同?Java 版本中或者不在不同的 JVM 中會發(fā)生改變,這使得正確解釋變得更難。

一般來說,如果垃圾收集器是一個(gè)分代收集器(多數(shù) “企業(yè)級” VMs 都是)。某種虛擬標(biāo)志將會出現(xiàn),來指出一個(gè)全部清掃 GC 通路;在 Sun JVM 中,標(biāo)志在 GC 輸出行的開始以 “[Full GC ...]” 形式出現(xiàn)。

想要診斷 ClassLoader 和/或不匹配的類沖突,class 可以幫上大忙。它不僅報(bào)告類何時(shí)加載,還報(bào)告類從何處加載,包括到 JAR 的路徑(如果來自 JAR)。

jni 很少使用,除了使用 JNI 或本地庫時(shí)。打開時(shí),它將報(bào)告各種 JNI 事件,比如,本地庫何時(shí)加載,方法何時(shí)彈回;再一次強(qiáng)調(diào),在不同 JVM 版本中,輸出會發(fā)生變化。


5. Command-line -X

我列出了 JVM 中提供的我喜歡的命令行選項(xiàng),但是還有一些更多的需要您自己發(fā)現(xiàn),運(yùn)行命令行參數(shù) -X,列出 JVM 提供的所有非標(biāo)準(zhǔn)(但大部分都是安全的)參數(shù) — 例如:

  • -Xint,在解釋模式下運(yùn)行 JVM(對于測試 JIT 編譯器實(shí)際上是否對您的代碼起作用或者驗(yàn)證是否 JIT 編譯器中有一個(gè) bug,這都很有用)。
  • -Xloggc:,和 -verbose:gc 做同樣的事,但是記錄一個(gè)文件而不輸出到命令行窗口。

JVM 命令行選項(xiàng)時(shí)常發(fā)生變化,因此,定期查看是一個(gè)好主意。甚至,您深夜盯著監(jiān)控器和下午 5 點(diǎn)回家和妻子孩子吃頓晚飯,(或者在 Mass Effect 2 中消滅您的敵人,根據(jù)您的喜好),它們都是不一樣的。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本和亚洲的香蕉视频| 欧美有码黄片免费在线视频| 粗暴蹂躏中文一区二区三区| 女同伦理国产精品久久久| 国产精品午夜视频免费观看| 亚洲中文字幕乱码亚洲| 久久婷婷综合色拍亚洲| 五月婷婷欧美中文字幕| 国产免费一区二区不卡| 成人精品一区二区三区在线| 四季精品人妻av一区二区三区 | 丁香六月啪啪激情综合区| 久久综合日韩精品免费观看| 日本欧美在线一区二区三区| 五月情婷婷综合激情综合狠狠| 一区二区三区18禁看| 熟女少妇一区二区三区蜜桃| 狠狠做深爱婷婷久久综合| 国产老女人性生活视频| 亚洲香艳网久久五月婷婷| 亚洲国产精品久久精品成人| 丰满少妇被猛烈插入在线观看| 人妻一区二区三区多毛女| 国产一区二区不卡在线视频| 美国欧洲日本韩国二本道| 东京干男人都知道的天堂| 69久久精品亚洲一区二区| 夫妻性生活黄色录像视频| 欧美午夜不卡在线观看| 国产日韩欧美在线播放| 人妻乱近亲奸中文字幕| 99久只有精品免费视频播放| 国产又粗又深又猛又爽又黄| 中文字幕免费观看亚洲视频| 成人欧美一区二区三区视频| 91插插插外国一区二区婷婷| 亚洲清纯一区二区三区| 亚洲视频一区自拍偷拍另类| 国产精品免费视频久久| 欧美日韩亚洲巨色人妻| 国产一级特黄在线观看|