偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

JDK中還藏著一個寶貝 它的名字叫做VisualVM

原創(chuàng)
開發(fā) 后端
JDK中還藏著一個寶貝,它的名字叫做VisualVM。VisualVM是Sun的一個OpenJDK項(xiàng)目,其目的在于為Java應(yīng)用創(chuàng)建一個整套的問題解決工具??梢哉fVisualVM是Java開發(fā)者最為重要的工具,但同時這也是最不為人知的秘密。

【51CTO獨(dú)家譯稿】令人意想不到的寶貝,其實(shí)往往已經(jīng)早就在你眼前,只不過你沒發(fā)現(xiàn)它。VisualVM就是這樣的。每當(dāng)我們升級JDK、打開IDE時,其實(shí)我們就用上了它所帶來的新特性。至少,我自己是這樣認(rèn)為的。

我第一次獲知VisualVM是在去年二月份Geertjan Wielenga所寫的一篇文章里,那時它的第三版都已經(jīng)發(fā)布了??梢哉fVisualVM是Java開發(fā)者最為重要的工具,但同時這也是最不為人知的秘密。在Java的運(yùn)行效率仍然是個問題的情況下,正是它有效的解決了這個問題。(有關(guān)VisualVM的簡介,可參考51CTO之前發(fā)布的Sun VisualVM項(xiàng)目 開源Java問題解決方案一文)

VisualVM簡介

簡單說來,VisualVM是一種集成了多個JDK命令行工具的可視化工具,它能為您提供強(qiáng)大的分析能力。所有這些都是免費(fèi)的!它囊括的命令行工具包括jstat, JConsole, jstack, jmap 和 jinfo,這些工具與JDK的標(biāo)準(zhǔn)版本是一致的。

你可以使用VisualVM生成和分析海量數(shù)據(jù)、跟蹤內(nèi)存泄漏、監(jiān)控垃圾回收器、執(zhí)行內(nèi)存和CPU分析,同時它還支持在MBeans上進(jìn)行瀏覽和操作。盡管VisualVM自身要在JDK6這個版本上運(yùn)行,但是JDK1.4以上版本的程序它都能監(jiān)控。

對于我來說,這些功能都是至關(guān)重要的。以前我一直在使用如YourKit這樣的一些付費(fèi)軟件來檢測我的應(yīng)用軟件,但現(xiàn)在我可以用VisualVM這樣一個開源工具來實(shí)現(xiàn)同樣的功能。更何況,有誰比能Sun公司更了解JVM呢?

如何獲取VisualVM

VisualVM的一個最大好處就是,它已經(jīng)在你的JDK bin目錄里了,只要你使用的是JDK1.6 Update7之后的版本。點(diǎn)擊一下jvisualvm.exe圖標(biāo)它就可以運(yùn)行了。

你所需要做的只是點(diǎn)一下jvisualvm.exe,就能啟動它。運(yùn)行中的所有Java應(yīng)用程序?qū)@示在右邊的導(dǎo)航欄。你會發(fā)現(xiàn)根本不需要在VisualVM 里親自為你的應(yīng)用程序注冊,因?yàn)樗鼈內(nèi)紩詣语@示出來。你甚至還可以在導(dǎo)航欄里查看到遠(yuǎn)程的應(yīng)用程序。

顯示為“未知進(jìn)程”(pid為5392)的程序是Eclipse 
顯示為“未知進(jìn)程”(pid為5392)的程序是Eclipse

使用VisualVM

VisualVM有很多令人眼前一亮的功能,它能使你:

◆監(jiān)控應(yīng)用程序的性能和內(nèi)存占用情況

◆監(jiān)控應(yīng)用程序的線程

◆分析(Profile)應(yīng)用程序性能和內(nèi)存分配情況

◆進(jìn)行線程轉(zhuǎn)儲(Thread Dump)或堆轉(zhuǎn)儲(Heap Dump)

◆分析核心轉(zhuǎn)儲(Core Dump)

◆保存快照以便脫機(jī)分析應(yīng)用程序。 

用VisualVM評估IDE

我很想用VisualVM 做點(diǎn)什么,于是我決定,用它來對目前最先進(jìn)的三個IDE進(jìn)行評測。為此我特意新安裝了 NetBeans 6.5.1 (JavaSE only version) , Eclipse (for Java Developers) 和 IntelliJ IDEA (8.1.2).

測試如下:

◆在VisualVM 中運(yùn)行內(nèi)存分析器(Memory Profiler)

◆在IDE中創(chuàng)建一個新的項(xiàng)目

◆創(chuàng)建一個簡單的類,這個類只有一個可以打印“Hello World"的main方法

◆保存內(nèi)存分析結(jié)果

◆生成這個應(yīng)用程序的堆轉(zhuǎn)儲(Heap Dump)

◆從VisualVM 的監(jiān)視視圖(Monitor View)里獲取信息

◆重新啟動IDE,使用CPU分析器(CPU Profiler),在IDE中執(zhí)行相同的步驟

◆保存CPU分析器(CPU Profiler)的結(jié)果

我意識到,CPU和內(nèi)存評測其實(shí)是可以同時進(jìn)行的,但為了便于下文的解釋,我特意將它們分別進(jìn)行。

我用IntelliJ做測試時,發(fā)現(xiàn)只有用我自己的JDK才能啟動它,而不能用它自帶的。雖然我太不熟悉這個IDE,但我發(fā)現(xiàn)當(dāng)我用JSDK創(chuàng)建新工程時,它必須解析JDK中的文件。

此外,請注意,這些IDE都是我剛剛才下載的默認(rèn)版本,沒有針對Java開發(fā)作什么優(yōu)化處理。

#p#

堆轉(zhuǎn)儲

我發(fā)現(xiàn)要對軟件進(jìn)行全面對比時,最好的手段是進(jìn)行堆轉(zhuǎn)儲(Heap Dump)。這在程序運(yùn)行時,使用VisualVM可以讓這項(xiàng)工作變得十分太簡單,你隨時都可以右鍵單擊那個程序,然后選擇 Heap Dump 就可以了。

在個領(lǐng)域我評測的兩個指標(biāo)是:字節(jié)總數(shù)和類(class)的總數(shù)

NetBeans堆轉(zhuǎn)儲 
NetBeans堆轉(zhuǎn)儲

Eclipse堆轉(zhuǎn)儲 
Eclipse堆轉(zhuǎn)儲

IntelliJ IDEA 堆轉(zhuǎn)儲 
IntelliJ IDEA 堆轉(zhuǎn)儲

NetBeans:

◆總的字節(jié)數(shù):31,576,772

◆總的類數(shù):10,583
 
IntelliJ :

◆總的字節(jié)數(shù):76,582,715

◆總的類數(shù):14,368

Eclipse:

◆總的字節(jié)數(shù):62,112,960

◆總的類數(shù):11,428
 
很明顯,NetBeans只用到了Eclipse的一半都不到,IntelliJ則用去了多得多。

而在監(jiān)視視圖(Monitor View)里看著這些程序運(yùn)行特別有意思,在這里我只關(guān)注了線程中的本地類,Eclipse差不多達(dá)到了25K,IntelliJ大概27K,NetBeans則在20K以下。

NetBeans 監(jiān)控視圖 
NetBeans 監(jiān)控視圖

Eclipse監(jiān)控視圖 
Eclipse監(jiān)控視圖

IntelliJ IDEA 監(jiān)控視圖 
IntelliJ IDEA 監(jiān)控視圖

#p#

內(nèi)存和CPU評測(Profile)結(jié)果

我注意到,當(dāng)我開始評測(profiling)時,類和方法中的指令執(zhí)行總是要讓我等上好一段時間。尤其是在IDE里,這段時間不算短,不過還算可以接受吧。

內(nèi)存和CPU評測對這些IDE的意義不是很大。但進(jìn)行這個分析所帶來的一個方便之處就是:你很容易就可以找到程序哪個地方發(fā)生了內(nèi)存泄漏。以下是對這幾個IDE的評測結(jié)果。

在這些IDE的評測結(jié)果中,我們可以看到一些很有趣的幾點(diǎn)。例如,NetBeans中用到了大量了byte[] ,而在Eclipse和IntelliJ中就明顯少得多了。另外我們還可以看到char[]在所有IDE里均被大量使用了。

◆NetBeans:內(nèi)存的19.6%

◆Eclipse:內(nèi)存的31.6%

◆IntelliJ:內(nèi)存的32.7%

NetBeans 內(nèi)存分析視圖 
NetBeans 內(nèi)存分析視圖

Eclipse內(nèi)存分析視圖 
Eclipse內(nèi)存分析視圖

IntelliJ IDEA內(nèi)存分析視圖 
IntelliJ IDEA內(nèi)存分析視圖

通過CPU評測我們能看出程序的哪個地方耗時最多。在這方面,各個IDE分別把時間用在了不同的方法(method)上,這一點(diǎn)有很大的不同:

◆NetBeans大部分時間花費(fèi)在org.openide.util.RequestProcessor $ Processor.run()- 58.1 %

◆Eclipse的時間花在java.lang.reflect.Method.invoke()- 約占45.5 %

◆IntelliJ在java.net.SocketInputStream.read()上耗費(fèi)掉了38.7 %的時間

NetBeans CPU 分析視圖 
NetBeans CPU 分析視圖

EclipseCPU 分析視圖 
EclipseCPU 分析視圖

IntelliJ IDEA CPU 分析視圖 
IntelliJ IDEA CPU 分析視圖

雖然這么一個橫向?qū)Ρ炔灰欢軌蛘f明什么問題。但能夠看到這些IDE在幕后不同的工作方式,也是一件很有趣的事情。

至此,我不得不認(rèn)為VisualVM 讓這項(xiàng)評測變得相當(dāng)?shù)暮唵巍N抑恍枰谶@些IDE啟動之前運(yùn)行VisualVM,它就能自動發(fā)現(xiàn)并掛載隨后啟動的每個IDE實(shí)例,然后就可以在VisualVM里作評測了。

#p# 

IDE集成

Java開發(fā)人員大多都是被IDE慣壞了的,一旦沒有順手的IDE可用就會無所適從。不過不用擔(dān)心,當(dāng)前流行的這些IDE都已經(jīng)有了VisualVM插件,這樣你就可以在你最喜歡的IDE里工作了,不用再跟命令行打交道了。

VisualVM在NetBeans里的集成很有意思,它其實(shí)已經(jīng)是NetBeans默認(rèn)的分析器了。在NetBeans中,它作為一個RCP程序,可以與其它的NetBeans模塊一起進(jìn)行更好地擴(kuò)展。

Eclipse和 IntelliJ IDEA的集成包可以通過點(diǎn)擊這里獲取。MyEclipse 7.5也已經(jīng)集成了VisualVM的插件。作為一個Eclipse開發(fā)者,我很感興趣這是究竟怎么辦到的,因?yàn)檫@個工具畢竟是在NetBeans平臺基礎(chǔ)之上構(gòu)建的。

與Eclipse的集成

首先,你得下載VisualVM Launcher插件,將它解壓到你的Eclipse主目錄里。這樣當(dāng)你打開Run Configurations對話框時,就會看到程序啟動器選項(xiàng)。默認(rèn)的啟動器是可以在偏好(Preferences)設(shè)置里修改的。

在我的設(shè)置里,我選擇當(dāng)使用啟動器時讓VisualVM Launcher運(yùn)行,其它時候就使用Eclipse默認(rèn)的程序Launcher。你可以針對你的應(yīng)用、小程序或者是Eclipse項(xiàng)目修改這些設(shè)置。

當(dāng)使用啟動器時讓VisualVM Launcher運(yùn)行 

然后你還得指定你所要采用的VisualVM 可執(zhí)行文件和JDK的路徑。 

指定你所要采用的VisualVM 可執(zhí)行文件和JDK的路徑 

這樣與Eclipse的集成就算完成了,它會自動啟動一個VisualVM ,你就可以用了。以后可能會有更深度的集成 ,那樣的話說不定我就直接可以在IDE里啟用它去分析程序了。

擴(kuò)展VisualVM

如果上面列舉的這些功能還不能滿足你的需要,那么你還可以編寫自己的VisualVM插件。VisualVM提供了許多的API調(diào)用入口,如下圖所示:

VisualVM提供了許多的API調(diào)用入口 
 
主要的一些調(diào)用入口有:

◆標(biāo)簽擴(kuò)展(Tab extension)。默認(rèn)情況下,VisualVM提供了像“Overview",Monitor,Threads這樣的一些標(biāo)簽。你可以自己定制一些類似的標(biāo)簽。此外,這些標(biāo)簽自身也可以擴(kuò)展,你可以為它們設(shè)置二級標(biāo)簽,還可以設(shè)置這些標(biāo)簽是對所有VisualVM數(shù)據(jù)源都可見,還是只針對一些特定的數(shù)據(jù)源類型。

◆二級標(biāo)簽擴(kuò)展(Subtab extension)。在上面所說的這些標(biāo)簽里,你可以插入新的標(biāo)簽,當(dāng)然,這是在標(biāo)簽被設(shè)置為可擴(kuò)展的前提下。可擴(kuò)展的標(biāo)簽有:"Overview"、"Monitor"、"Threads"、"Heap Dump"和"Host"。當(dāng)你插入一個新的子標(biāo)簽時,你可以指定它與其它子標(biāo)簽的相對位置關(guān)系。子標(biāo)簽也可以設(shè)置是對所有VisualVM數(shù)據(jù)源都可見,還是只針對一些特定的數(shù)據(jù)源類型。

◆菜單擴(kuò)展(Menu extension)。一個數(shù)據(jù)源以及它的子節(jié)點(diǎn),都可以為它們的上下文菜單添加一個或若干個菜單。

◆應(yīng)用類型擴(kuò)展(Application type extension)。在默認(rèn)情況下,除非提供了一個特定的插件,否則在VisualVM里可見的這些應(yīng)用都是一樣的,它們有著同樣的圖標(biāo)和標(biāo)簽。在定義了一種應(yīng)用類型之后,你可以為這種特定的應(yīng)用再安裝一個插件,這樣做可以為不同的應(yīng)用具有不同的圖標(biāo)(比較簡單),也可以提供像繪圖這樣的額外功能。

◆數(shù)據(jù)源的擴(kuò)展(Data source extension)。 “應(yīng)用程序”的數(shù)據(jù)源只是VisualVM可以監(jiān)管的一種數(shù)據(jù)源類型。另一種數(shù)據(jù)源類型是“主機(jī)”數(shù)據(jù)源,它可讓你監(jiān)控和管理本地的和遠(yuǎn)程的主機(jī)。如果VisualVM的默認(rèn)配置不能滿足你的需求,你可以創(chuàng)建新的數(shù)據(jù)源類型讓它監(jiān)管。

在VisualVM的官方網(wǎng)站上,有一個關(guān)于編寫VisualVM插件的詳細(xì)說明,這份說明淺顯易懂,如果你以前有過在NetBeans或者Eclipse上有過開發(fā)插件的經(jīng)歷,那就更容易上手了。不僅如此,VisualVM的插件中心里已經(jīng)有不少現(xiàn)成的插件可用,只需進(jìn)入“工具”/“插件”就可以看到了。

VisualVM的插件中心 

VisualVM 簡單易用(相信你已經(jīng)會用它了),還具備可供擴(kuò)展的平臺,這些都必將使它成為開發(fā)者不可或缺的工具。讓我印象非常深刻的是,它能夠自動掛載運(yùn)行中的程序,而不用開發(fā)者去做注冊工作。在理論上,我們甚至還可以在完善和再次啟動Java應(yīng)用程序的時,讓它一直在后臺運(yùn)行,這實(shí)在是太妙了。

JDK中還藏著一個寶貝,它的名字叫做VisualVM。趕快去下載運(yùn)行,讓它幫你找出程序中的所有不足吧。

【編輯推薦】

  1. 6月5日外電頭條:探秘Java 7模塊化 類路徑永遠(yuǎn)消失
  2. Java 2008年大事記 由語言到平臺的轉(zhuǎn)變
  3. 2008年Java開發(fā)工具發(fā)展回顧
  4. 從IDE到JDK 細(xì)看2008年Java發(fā)展之路
  5. Java 7新特性展望 語言本身的改變會很少
責(zé)任編輯:yangsai 來源: 51CTO.com
相關(guān)推薦

2016-09-07 13:07:55

大數(shù)據(jù)大數(shù)據(jù)分析精準(zhǔn)營銷

2015-12-09 16:21:41

2017-08-02 09:08:07

機(jī)械硬盤存儲

2015-10-10 11:09:48

NFVNFVI網(wǎng)絡(luò)虛擬化

2024-05-06 09:08:52

微軟開源Linux

2025-03-07 09:18:10

2019-02-22 22:35:17

Mac插件安裝

2021-06-24 10:28:19

uptimed命令Linux

2019-06-19 09:56:39

地震預(yù)警系統(tǒng)

2019-09-11 15:11:00

智能

2022-02-07 15:24:53

iOS蘋果系統(tǒng)

2021-03-09 10:12:28

編程技能開發(fā)

2022-05-27 07:03:04

JDK場景線程

2010-11-17 09:18:27

數(shù)據(jù)庫

2013-11-04 17:02:40

Windows 8.1隱藏功能

2015-12-30 10:03:31

虛擬現(xiàn)實(shí)技術(shù)

2021-04-19 23:29:44

MakefilemacOSLinux

2021-12-01 19:32:14

原理Node代碼

2009-05-24 14:38:07

LinuxU盤病毒

2010-07-30 08:30:38

VisualVMVisualVM 1.VisualVM 1.
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號