11
votes

Nombre maximum de caractères StringBuilder peut accueillir

Je dois écrire 10 000 x 30 000 caractères. Un seul StringBuilder sera-t-il capable d'acomodater tous les caractères ou devriez-je penser à une gamme de Stringbuilders? Je n'ai pas accès aux cas de test, je ne peux donc pas le vérifier moi-même. J'espère que je trouverai la réponse ici.

Merci d'avance. P>

EDIT: P>

J'ai essayé d'ajouter 10000 x 30000 caractères à l'aide d'une boucle. Je reçois les exceptions suivantes. P>

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)


0 commentaires

3 Réponses :


18
votes

La longueur est une intensive de sorte qu'il devrait contenir jusqu'à 2GChar (4 Go) en supposant que vous ayez la mémoire. Vous allez utiliser «seulement» 600 Mo (300 millions @ 2 octets par caractère). Faites attention à ce que nombre de copies vous finissent par faire ... I.e. Tostring ().


2 commentaires

J'ai essayé d'ajouter 10000x30000 caractères à l'aide d'une boucle et donne des erreurs. S'il vous plaît voir la modification.


Vous devez augmenter l'espace de tas à la disposition de la machine virtuelle avec l'option -xms1024m -xmx1536m de ligne de commande, qui définira l'allocation initiale sur 1 Go et le max sur 1,5 Go. Si vous courez dans un environnement 32 bits, cela peut être problématique.



3
votes

Ce que vous devez vous inquiéter est la taille maximale du tas. Cela ne fera aucune différence si vous utilisez des objets Single ou plusieurs StringBuilder.


0 commentaires

1
votes

Tant que la longueur de la séquence de caractères contenue dans le générateur de cordes ne dépasse pas la capacité, il n'est pas nécessaire d'attribuer un nouveau tampon interne. Si le tampon interne déborde, il est automatiquement rendu plus grand. Et cela vous donne le nombre maximum de caractères que cette mémoire StressBuilder peut contenir en ce moment.


0 commentaires