2015-01-08 2 views
2

많은 수의 SQL 문을 하나의 파일에 작성한 다음 압축합니다. 그러나 때때로 사용자는 SQL 문을 생성하기 위해 많은 수의 항목을 선택할 수 있습니다. 예를 들어, SQL zip 파일에는 결과로 1 백만 개 이상의 문자가 각각 4 개의 파일이 포함될 수 있습니다. 오류 :ToStringBuilder (apache commons)의 메모리 사용량을 줄입니까?

@Override 
public String toString() { 
    return ToStringBuilder.reflectionToString(this); 
} 

그러나 이것은 "Java 힙 공간 java.lang.OutOfMemoryError와"에서 충돌 프로그램에서 큰 메모리 사용 스파이크 결과가 발생합니다 존재하는 SQL 생성에서

는 기능에 따라 달라집니다 . 힙 크기를 늘리려고했지만 프로그램이 여전히 느리고 여전히 가끔 충돌이 발생합니다.

위의 방법의 메모리 사용을 줄이는 방법은 있습니까? 전체 개체를 문자열로 출력해야합니다 그 이름뿐 아니라). 아래 그림은 응용 프로그램이 부팅되고, 잠시 동안 유휴 상태로 있으며 다음을 시도하는 것입니다. 충돌하기 전에 실행. enter image description here

그리고 여기에 메모리를 사용하는 것입니다 : 나는 같은 오류 ("java.lang.OutOfMemoryError와 : Java 힙 공간")했다 enter image description here

+0

교양있는 추측을하기위한 정보는 거의 없습니다. 파일 작성 코드를 제공 할 수 있습니까? – lwi

+0

당신은 당신의 접근 방식을 바꿔야한다. 나는 File 객체를 사용하여 문제를 해결할 수있는 결과를 저장한다면, File 객체로부터 zip을 쓰는 것이 더 낫다고 생각한다. –

+1

'ToStringBuilder'는'StringBuffer'만을 사용하고 출력 스트림은 사용하지 않기 때문에 파일에 쓸 때까지 메모리에 전체 객체 문자열을 보유해야합니다. pojos를 파싱하는 동안 문자열을 덤프 할 수있는 다른 방법을 들여다 볼 수 있습니다. –

답변

0

과 : 내부

@Override 
public String toString() { 
    return ToStringBuilder.reflectionToString(this); 
} 

을 추상적 인 수퍼 클래스. 나는 Apache Commons Lang3 documentation 읽은 후

, 난 반사를 사용하지 않는 기능을 사용하여 문제를 해결하고 빠른이라고합니다 : id 분명히 내가 원하는 내 슈퍼 클래스의 필드

@Override 
public String toString() { 
    return new ToStringBuilder(this).append("id",id).toString(); 
} 

산출.

이렇게하면 힙 오버플로 문제가 해결되고 응용 프로그램이 훨씬 빠르게 실행됩니다.

유일한 단점은 toString 출력이 훨씬 간단하지만 어쨌든 이것은 디버깅에만 사용되므로 큰 문제는 아닙니다.

+0

고마워, 이건 내게 맞았다 – George

+0

@jnd이 대답이 도움이 될 경우이 대답을 수락 됨으로 표시하는 것이 좋습니다. 감사! –

관련 문제