SAXParser로 2GB XML 파일을 구문 분석하려고합니다. 내 임무는 정보 재발행에 관한 것이고 나는 필요한 정보를 기억해야한다고 들었다. 파일은 단어들로 구성된 문서들로 분리되어 있습니다. 각 단어는 다른 문서의 모양을 저장해야하는 대상입니다. 다음 문서가 시작될 때 나는 모든 객체를 팝업하여 가능한 크기의 메모리가되도록 완벽한 크기의 배열에 넣습니다. 문제 :이 메서드는 너무 많은 임시 개체를 생성하므로 가비지 수집기가 너무 많은 작업을 수행합니다. 그 많은 임시 개체를 만드는 것을 피하거나 버퍼를 GC와 충돌시키지 않는 방법이 있습니까?자바에서 큰 버퍼를 관리하는 방법은 무엇입니까? 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
간단히 배열'T [] elements'를'Stack'에 저장하면 더 쉬울 것입니다; 당신이 공간을 다 쓸 때 곱셈의 양만큼 길이를 늘리십시오. StackObject 클래스의 인스턴스는 필요 없습니다. –