使用Java VisualVM分析您的應用程序

當您需要發現應用程序的哪個部分消耗更多的CPU或內存時,必須使用探查器執行此操作。

默認情況下,Sun JDK中附帶的一個探查器是Java VisualVM。 這個事件探查器非常簡單易用,功能強大。

在這篇文章中,我們將看到如何安裝它并使用它來分析應用程序。
通常,無需安裝它,因為它與JDK一起安裝。 但是在幾個Unix系統中,例如Ubuntu,情況并非如此。 如果要安裝它,只需使用apt-get(或aptitude):

須藤apt-get install visualvm

要啟動它,只需啟動jvisualvm(Windows的jdk的bin目錄中的jvisualvm.exe)。
這將打開以下窗口:

這里沒有很多有趣的東西。 要分析應用程序,只需啟動它,VisualVM就會檢測到它已啟動:

之后,您只需雙擊以查看有關正在運行的應用程序的信息。 您有四個選項卡可用于您的應用程序(“概述”,“監視器”,“線程”,“探查器”)。 我們將看到所有這四個標簽。 首先,默認選項卡,概述:

此選項卡包含有關已啟動的應用程序的主要信息。 您可以看到主類,命令行參數和JVM參數。 您還可以查看哪種類型的JVM正在運行您的程序以及JVM所在的位置。 您可以看到該程序中設置的所有屬性。
一個更有趣的標簽是“監視器”標簽:

此選項卡跟蹤您的應用程序的CPU和內存使用情況。 您在此視圖中有4個圖。 第一個從左到右,從上到下顯示CPU使用率和Garbage Collector CPU使用率。 第二張圖顯示堆空間和PermGen空間的使用情況。 下一個圖顯示了應用程序中加載的類的總數,最后一個圖顯示了當前正在運行的線程數。 通過這些圖,您可以查看應用程序占用的CPU過多還是應用程序占用的內存過多。

第三個選項卡提供有關Threads的一些詳細信息:

在此視圖中,您可以看到應用程序的不同線程如何改變狀態以及它們如何演變。 您還可以查看每次進入每種狀態的時間,并且可以了解有關所需線程的詳細信息。
現在,我認為最有趣的標簽是Profiler之一:

第一次打開此選項卡時,它根本不包含任何信息。 您必須先進行一種分析,然后才能查看信息。 我們將從CPU分析開始。 只需單擊CPU按鈕,儀器就會啟動。 檢測期間,該應用程序將被阻止。 檢測完成后,您可以再次訪問該應用程序,并且將在表中顯示概要分析的結果。 當然,分析會對您的應用程序造成負擔。 通常它是不可見的,但是對于某些應用程序,您可能會失去很多流動性。 這是我通過簡單的應用程序獲得的結果:

在我的示例中,我們可以看到waitForTimeout方法占用了CPU時間的81.6%。 我們還可以看到,notifyDecision和getSensor方法是緊隨其后的兩個最消耗CPU的方法,也許對它們進行優化很有趣。 您還可以查看每個方法的調用次數,也許您會發現一個調用時間過多的方法。

我們可以做的下一個性能分析是內存性能分析。 再次在這里,您必須開始分析,儀器將啟動,在此期間,應用程序將被凍結。 這是我的申請結果:

在這里,我們可以看到該應用程序存儲了一些大的double []和float []數組,EllipseIterator和BasicStroke類也占用了大量的內存空間。
在內存和CPU性能分析中,您都可以將結果保存到文件中以供日后查看。 例如,您可以讓應用程序通宵工作,早上保存結果并檢查結果,或者進行三個性能分析并比較三個結果。

總而言之,我不得不說這個探查器非常簡單,但是使用起來卻非常強大。 我們擁有分析器所需的主要功能,并且效果非常好。 這種工具確實可以幫助您改進應用程序,以減少CPU和內存的使用。 當然,這種工具并不能解決所有問題,它只是幫助顯示必須改進應用程序的哪一部分,改進部分是開發人員的任務,而不是最簡單的。 但是擁有這種工具是一個好的開始。

參考:通過@Blog(“ Baptiste Wicht”)的 JCG合作伙伴 Baptiste Wicht 使用Java VisualVM對應用程序進行概要分析 。

相關文章 :

  • 從CLI監視OpenJDK
  • 績效焦慮–關于績效不可預測性,度量和基準
  • JVM選項:-client vs -server
  • Java中的低GC:使用原語而不是包裝器

翻譯自: https://www.javacodegeeks.com/2012/01/profile-your-applications-with-java.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374183.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374183.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374183.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ArcSDE for SQL Server安裝及在ArcMap中創建ArcSDE連接

ArcSDE for SQL Server安裝及在ArcMap中創建ArcSDE連接 原文:ArcSDE for SQL Server安裝及在ArcMap中創建ArcSDE連接安裝ArcSDE for SQL Server,最后一步成功后的界面如下:在ArcMap中創建ArcSDE連接,截圖如下:posted on 2016-08-0…

java反射main方法參數注意

public class ReflectMethodMain {public static void main(String[] args) throws Exception {Method methodMainTestArgument.class.getMethod("main", String[].class);/*jdk 1.4之前的版本不支持可變參數,對組類的參數會自動拆包然后用來匹配數據參數…

python調用c函數傳字符串參數_Python使用ctypes模塊調用DLL函數之傳遞數值、指針與字符串參數...

在Python語言中,可以使用ctypes模塊調用其它如C語言編寫的動態鏈接庫DLL文件中的函數,在提高軟件運行效率的同時,也可以充分利用目前市面上各種第三方的DLL庫函數,以擴充Python軟件的功能及應用領域,減少重復編寫代碼、…

沁恒CH554 KEIL環境搭建

首先下載WCHISPTool_Setup.exe http://www.wch.cn/products/CH554.html 123這三個可下載的都下吧,后面開發都要用的 安裝好后運行,菜單欄上,功能->添加WCH MCU到KEIL器件庫 這時候在KEIL安裝目錄里面的UV4文件夾下可以看到wch.cdb的文件…

【CV論文閱讀】Rank Pooling for Action Recognition

這是期刊論文的版本,不是會議論文的版本。看了論文之后,只能說,太TM聰明了。膜拜~~ 視頻的表示方法有很多,一般是把它看作幀的序列。論文提出一種新的方法去表示視頻,用ranking function的參數編碼視頻的幀序列。它使用…

java不要在常量和變量中出現易混淆的字母

public class proposal {public static void main(String[] args) {long i1l; System.out.println("i的兩倍是:"(ii));System.out.println("i的兩倍是:"ii); //注意此處和上面的有很大的區別} }輸出:211/** 注意:* …

VS2019 WPF制作OTA上位機(一)新建工程

首先創建新項目,文件 -> 新建 -> 項目 下拉菜單選擇C#和Window,選擇WPF應用程序,下一步 輸入項目名,下一步 這里選擇.NET 5.0,也可以選擇其他的,個人習慣.NET,點擊創建 這時候出現初始…

戶籍恢復需要體檢嗎_腦梗死后腳麻能恢復嗎?需要多久能恢復呢?

腦梗死之后腳部麻木,這個有一部分是能夠恢復的,但是相對而言,恢復的時間比較長,在臨床當中出現腳麻主要是因為梗死破壞了患者的感覺神經中樞從而造成。腳部感覺麻木,瘙癢或者是有螞蟻在上面爬的感覺。而且有的更加嚴重…

Alpha版本測試報告

一、測試計劃 Alpha版本即將發布,我們組織隊員進行這一版本的測試。 測試主要針對兩方面:瀏覽器兼容性和功能完善性。 測試分兼容性測試與功能完善性兩部分,兼容性測試分Windows操作系統、Linux系操作系統、Mac OS X操作系統以及手機端Androi…

在J2SE應用程序中模擬CDI的會話和請求范圍

我們目前正在考慮將Naked Objects框架重構為使用JSR-330(依賴注入)和面向EE的老大哥JSR-299(CDI)。 使用香草JSR-330是不費吹灰之力的,但是我們想利用JSR-299中的一些不錯的功能(例如事件和裝飾器&#xff…

VS2019 WPF制作OTA上位機(二)獲取bin文件路徑

OTA升級是通過無線通信遠程把bin文件內容傳輸到單片機,完成升級。 因此上位機需要獲取bin文件的路徑,讀取bin文件內容,將內容分割依次發送(因為單片機的接收緩存不會開得和bin文件一樣大(十幾K甚至幾十K)&a…

java 線程“生產/消費”模型1

/*資源類*/ public class ShareValue {private int total;public ShareValue(int total){this.totaltotal;}//生產void putValue(int value){totalvalue;}//消費資源int getValue(int value){if(total-value>0){total-value;}else{valuetotal;total0;System.out.println(&qu…

PHP - 代碼分離

總代碼&#xff1a; <?php/** Version&#xff1a;1.0* CreateTime&#xff1a;2015年11月11日* Author&#xff1a;HF_Ultrastrong*///引入公共文件,在公共文件中創建&#xff0c;相對于項目的絕對路徑require dirname(__FILE__)./includes/common.inc.php; ?&…

原生js封裝table表格操作,獲取任意行列td,任意單行單列方法

V1.001更新增加findTable-min.js 本次更新&#xff0c;優化了代碼性能方面&#xff0c;增加了部分新功能&#xff0c;可以獲取多個table表格批量操作。 考慮到本人后面的項目中可能涉及到大量的表格操作&#xff0c;提前先封了 一個簡單的操作方法&#xff0c;日后再加完善&…

Spring陷阱:事務測試被認為是有害的

Spring殺手級功能之一是容器內集成測試 。 盡管EJB多年來一直缺乏此功能&#xff08;Java EE 6終于解決了這個問題&#xff0c;但是我還沒測試過&#xff09;&#xff0c;但是Spring從一開始就允許您從Web層開始&#xff0c;通過所有服務來測試整個堆棧。到數據庫的方式。 數據…

python xlwt寫入已有表_Python中,添加寫入數據到已經存在的Excel文件

1.安裝xlrd、xlwt、xlutilshttps://pypi.org/project/xlutils/pip安裝&#xff1a;cmd下輸入&#xff1a;pip install xlrd #讀取exclepip install xlwt #寫入exclepip install xlutils #操作 Excel 文件的實用工具&#xff0c;如復制、分割、篩選等2.代碼主要部分實現import x…

java線程“生產/消費”模型2

/* 資源類 */ class ShareValue {private int total;//判斷對象是否為空private boolean isEmptytrue;//判斷對象是否已滿private boolean isFulltrue;public ShareValue(int total) {this.total total;if(total>0) isEmptyfalse;if(total<1000) isFullfalse;}/** sync…

linux更改用戶名_破舊安卓手機第二春,在安卓手機上使用Linux_deploy運行Linux

由于服務器位于國外&#xff0c;害怕被墻掉導致數據丟失&#xff0c;所以在本地寫了腳本每小時從服務器上導出并下載到本地。但是電腦不可能二十四小時開機&#xff0c;所以很想買一個樹莓派4玩玩。但是太貴遼&#xff0c;還好搜索到了Android運行Linux的方法&#xff0c;下面記…

關于Cocos2d-x中init方法和onEnter方法的區別

init()和onEnter()這兩個方法都是寫實例化對象的類(比如繼承自Node的一些類等等)的時候用到的方法。 一般都是public類型下面的 bool init(); void onEnter(); 兩個方法在實現的時候都要先執行父類方法&#xff0c;比如 Node::init(); Node::onEnter(); 注意&#xff1a; 1.ini…

在5分鐘內在MacOSX Lion中設置JAVA_HOME,MAVEN_HOME,ANT_HOME

人們一直試圖通過Mac上的Java開發世界來解決這個問題&#xff0c;這一直是我一直遇到的問題。 他們必須解決的第一件事就是設置適當的工具和環境。 幸運的是&#xff0c;足夠多的MacOSX &#xff08;Lion或以前的版本&#xff09;仍然有許多重要的工具可用于Java開發&#xff0…