2012-10-06 6 views
7

Ho bisogno di scrivere 10.000 x 30.000 caratteri. un singolo stringbuilder sarà in grado di acomodare tutti i personaggi o dovrei pensare a una serie di stringbuilder? Non ho accesso ai casi di test, quindi non posso verificarlo da solo. Spero di trovare la risposta qui.Numero massimo di caratteri che il costruttore di stringhe può contenere

Grazie in anticipo.

EDIT:

Ho provato ad aggiungere 10000 x 30000 caratteri utilizzando un ciclo. Ottengo le seguenti eccezioni.

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) 

Cosa fare con questo "spazio java heap"?

risposta

14

La lunghezza è un valore int che deve contenere fino a 2GChar (4 GB) assumendo che si disponga della memoria. Utilizzerai "solo" 600 MB (300 milioni di byte 2 per carattere). Basta fare attenzione a quante copie si finisce per fare ... cioè toString().

+0

Ho provato ad aggiungere 10000x30000 caratteri utilizzando un ciclo e dà errori. per favore vedi la modifica. –

+2

È necessario aumentare lo spazio heap disponibile per la macchina virtuale con l'opzione della riga di comando '-Xms1024m -Xmx1536m', che imposterà l'allocazione iniziale su 1 GB e il valore massimo su 1,5 GB. Se stai utilizzando un ambiente a 32 bit, potrebbe essere problematico. –

3

Quello di cui devi preoccuparti è la dimensione massima dell'heap. Non farà alcuna differenza se si usano oggetti StringBuilder singoli o multipli.

1

Fintantoché la lunghezza della sequenza di caratteri contenuta nel generatore di stringhe non supera la capacità, non è necessario allocare un nuovo buffer interno. Se il buffer interno fuoriesce, viene automaticamente ingrandito. E ti dà il numero massimo di caratteri che questa memoria istanza StringBuilder può contenere in questo momento.

Problemi correlati