java效能分析可以使用JProfiler
詞頻統計處理的文件為WarAndPeace,大小3282KB約3.3MB,輸出結果到文件
在程序本身內開始和結束分別加入時間戳,差值平均為480-490ms。
結果如下:
1.統計概要
2.CPU運行曲線:程序運行高峰可以達到21.44%,原因可能的添加不同單詞到map中之前對字符處理導致的,第二高峰可能是按詞頻序排序導致
3.內存占用情況:char數組占用較大,其原因也是讀入文件進行處理必須的。String和StringBuffer,StringBuilder等也是創建了比較多的實例,如果可以的話可以嘗試減少實例化數量
4.函數運行時間和調用次數統計。其中isCharacter函數平均運行時間非常短,但是調用次數太多倒數時間占比不小,這個函數會在每個字符讀入后調用,是關鍵函數,暫時沒法縮減其調用頻率。
5.詳細一些的高占比時間的函數運行統計排序,和之前的分析一樣isCharacter函數運行占比較大,其他高占比函數也包括字符串處理函數。
總結:
由以上分析可得,isCharacter為使用次數多導致的比較高效的函數變為占比時間高的函數,字符串處理也占用了比較大的運行時間。char數組為內存占比較大的數據類型,后來對字符串的處理也會使用相對較大的內存。
效率改進方向:提升isCharacter效率和減少字符串創建的次數。