我嘗試使用SAXParser解析2GB XML文件。我的任務是關於中世紀的信息,我被告知要處理我在記憶中需要的信息。該文件被分成由文字組成的文件。每個單詞都是一個對象,其中應該存儲其他文檔中的外觀。 當下一個文檔開始時,我會彈出所有這些對象,並將它們放入一個完美大小的數組中,以儘可能提高內存的效率。現在的問題:這種方法創建了太多的臨時對象,所以垃圾收集器做了太多工作。有沒有辦法避免創建許多臨時對象或使緩衝區不與GC發生衝突?如何在java中管理大型緩衝區?超過GC開銷限制
public class Stack<T> {
StackObject<T> top;
boolean empty;
int entryCounter;
Stack(){
empty = false;
}
public void init(T obj){
top = new StackObject<T>(obj);
}
public T pop(){
T tmp = top.self;
if(top.next != null){
top.self = null;
top = top.next;
}
else{
empty = true;
}
return tmp;
}
public void push(T obj){
StackObject<T> tmp = new StackObject<T>(obj);
tmp.next = top;
top = tmp;
entryCounter += 1;
if(tmp.next == tmp){
System.out.println("ERROR");
}
}
}
class StackObject<T>{
T self = null;
StackObject<T> next = null;
StackObject(T obj){
self = obj;
}
}
這很不清楚 - 你基本上試圖描述一些代碼,然後問我們如何使它更有效率。這些臨時對象是什麼? –
我編輯了請求。 – Benedikt
簡單地在'Stack'中存儲數組'T [] elements'會更容易;然後在空間不足時將其長度增加一倍。不需要'StackObject'類的實例。 –