我有兩個文件,包含字長度3至6和包含字7.字典的字典中的字存儲在文本文件用換行分離。此方法加載文件並將其插入到存儲在應用程序類中的ArrayList中。的Android插入字轉換爲ArrayList中,內存
的文件大小爲386KB和380 KB和包含各自小於200K字。
private void loadDataIntoDictionary(String filename) throws Exception {
Log.d(TAG, "loading file: " + filename);
AssetFileDescriptor descriptor = getAssets().openFd(filename);
FileReader fileReader = new FileReader(descriptor.getFileDescriptor());
BufferedReader bufferedReader = new BufferedReader(fileReader);
String word = null;
int i = 0;
MyApp appState = ((MyApp)getApplicationContext());
while ((word = bufferedReader.readLine()) != null) {
appState.addToDictionary(word);
word = null;
i++;
}
Log.d(TAG, "added " + i + " words to the dictionary");
bufferedReader.close();
}
程序在運行2.3.3的模擬器上使用64MB SD卡崩潰。 使用logcat報告的錯誤。 堆增長超過24 MB。然後我看到鉗位目標GC堆從25.XXX
到24.000 MB。
GC_FOR_MALLOC釋放0K,12%空閒,外部1657k/2137K,暫停208ms。
GC_CONCURRENT釋放XXK,在一個24字節的分配免費
出的存儲器中,然後致命異常14%,存儲器耗盡。
我怎樣才能加載這些文件沒有得到如此大的堆?
內MyApp的:
private ArrayList<String> dictionary = new ArrayList<String>();
public void addToDictionary(String word) {
dictionary.add(word);
}
你爲什麼這樣做:word = null? –
我試圖確保gc知道釋放這個詞。我只是補充說,作爲最後的手段。 – user1781570
請問您可以添加'addToDictionary()'函數的代碼嗎?這是尋找內存泄漏最明顯的地方。 –