我尝试使用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'类的实例。 –