利用visual VM 分析統計單詞頻率程序

  最近老師佈置了一道關於統計單詞出現的頻率的程序。並利用相關軟件分析一下相應程序的效率問題,看看CPU的利用率問題等。首先我們來分析一下單詞的統計頻率的問題。

 要想統計一篇英文文本文件的高頻詞彙。面臨以下幾個問題:1、存儲問題,如果文本文件所含信息量比較大的話,利用什麼存儲結構來存取這些信息。2、統計高頻詞。這裏主要是對相同單詞的計數問題。解決這兩個問題的方法直接關係到我們程序的效率。因此我採用一種“一邊讀取一比統計”的方法。這裏主要利用java語言編寫採用哈希數據結構來存取單詞。這種情況下,算法的最壞的複雜度爲O(N^2);

 採用java裏面的哈希數據結構的主要原因是java裏面的哈希是一種“鍵值對”的結構,並且哈希的存取是按照自動增加長度的方式來擴充,解決了存取中的內存浪費或不足問題。所以這樣的數據結構剛好能解決上述的兩個問題。現在我們來看看具體的程序和效率。

一、利用hashmap存取並統計信息

public void countWord(String list){

Map<String,Integer> map = new HashMap<String,Integer>();//將文本文件易字符串形式存到MAP中

Matcher m = Pattern.compile("[a-zA-Z]+").matcher(list);

String key;

while ( m.find() ){

key = m.group();

if ( map.containsKey(key) ){

map.put(key, map.get(key) + 1);

}else {

map.put(key,1);

}

}

this.print("count by word:"+list, map);

}

二、利用comparetor對map對象進行排序

private static class comparator implements Comparator<Map.Entry<String,Integer>>{

public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {

return o2.getValue()-o1.getValue();

}}

三、程序代碼測試

wKiom1Mm7Y7TQ3TAAACeP8wvEuw244.jpg

四、利用visual VM 分析程序運行時的性能

1、首先看看內存中各個類名所在內存中的比例。

wKiom1MnwAPDzRD9AAFpbL-KNQI199.jpg由圖中看到出char[],int [],byte[]所佔比列最大,這是由於HashMap<String,Integer>進行存取引起的效果。

2這是CPU使用情況。可以看得出程序運行時CPU增幅不是很大。

wKiom1MnwAPTrNpBAAEHCct1x3U089.jpg

3、內存增量圖

wKioL1Mnv93w_x3KAAGCSlINcD0966.jpg

由圖可以看得出,內存變化不是很大,所以採用哈希結構可以幫助大大提高內存的使用效率。


初次使用visualVM 分析java程序,有很多不懂得地方,希望各位看官指點。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章