2012-10-06 2 views
7

입니다. 10,000 x 30,000자를 써야합니다. 단일 stringbuilder는 모든 문자를 분석 할 수 있습니까? 아니면 stringbuilders 배열을 생각해야합니까? 테스트 케이스에 액세스 할 수 없으므로 실제로 직접 확인할 수는 없습니다. 희망은 여기에 대답을 찾을 수 있습니다.최대 문자열 수는

미리 감사드립니다.

편집 :

나는 루프를 사용하여 10000 X 30000 문자를 추가하기 위해 노력했다. 다음과 같은 예외가 있습니다.

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
at java.util.Arrays.copyOf(Arrays.java:2367) 
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130) 
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114) 
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:415) 
at java.lang.StringBuilder.append(StringBuilder.java:132) 
at Test.main(Test.java:19) 

"java heap space"는 어떻게해야합니까?

답변

14

길이가 int이므로 메모리가 있다고 가정 할 때 최대 2GChar (4GB)를 유지해야합니다. "600MB"(1 문자 당 2 억 바이트)를 사용합니다. 얼마나 많은 사본을 만들어야하는지, 즉 toString()을 조심하십시오.

+0

루프를 사용하여 10000x30000 문자를 추가하려고 시도했지만 오류가 발생합니다. 편집을 참조하십시오. –

+2

'-Xms1024m -Xmx1536m' 명령 행 옵션을 사용하여 VM에 사용할 수있는 힙 공간을 늘려야합니다.이 옵션은 초기 할당을 1GB로 설정하고 최대 값을 1.5GB로 설정합니다. 32 비트 환경에서 실행 중이면 문제가 될 수 있습니다. –

3

걱정할 필요가있는 것은 최대 힙 크기입니다. 단일 또는 다중 StringBuilder 객체를 사용하더라도 아무런 차이가 없습니다.

1

문자열 작성기에 포함 된 문자 시퀀스의 길이가 용량을 초과하지 않는 한 새 내부 버퍼를 할당 할 필요가 없습니다. 내부 버퍼가 오버플로되면 자동으로 커집니다. 그리고이 StringBuilder 인스턴스 메모리가 현재 보유 할 수있는 최대 char 수를 제공합니다.

관련 문제