4 Réponses :


0
votes

Essayez d'allouer, dites, une arraylist et de doubler sa taille d'exécution.


1 commentaires

Cela me donnant à nouveau une exception dans le fil "Main" Java.lang.outofMemororyError: Place de tas Java à Java.Util.arrays.Copyof (Arrays.java:2760) à Java.Util.arrays.Copyof (Arrays.java:2734) à java.util.arraylist.ensurecapapacité (arraylist.java:167) à java.util.arraylist.add (arraylist.java:351) à Javatest.main (Javatest.java:27)



1
votes

Le tableau est attribué en tant qu'espace de tas permanent et la mémoire peut être fragmentée en raison de l'allocaion d'objet et de la collecte des ordures. L'erreur hors mémoire se produit du fait d'un manque de mémoire solide pour allouer le tableau. Avez-vous envoyé la mémoire JVM explicitement avec -xmx Drapeau?


1 commentaires

Oui je l'ai fait. Javac * .java; Java -XMX1000m Javatest



26
votes

pour moi xxx

rendements exception dans le fil "Main" Java.lang.outofMemororyError: Taille du tableau demandé dépasse la limite VM

< / P>

PS: Si vous devez produire l'exception aux fins des tests, vous pouvez également simplement Jetez New OutofMemoryError (la taille de la matrice demandée dépasse la limite VM ») vous-même.


9 commentaires

Merci. Cela fonctionne aussi pour moi. Mais pourquoi mon code n'a-t-il pas fonctionné plus tôt?


D'accord. Donc, mon système produit cette exception dans la gamme de 1024 * 1024 * 1024-2 à INTEGER.MAX_Value


@Adrian, comment puis-je connaître ma limite VM?


Je ne sais pas non plus non plus, mais integer.max_value devrait être une supposition sûre pour le test (je suppose que vous devez provoquer cela pour un test), n'est-ce pas? (En fait, si vous en avez besoin pour tester, vous pouvez jeter l'exception vous-même, non?)


Mais pourquoi cette exception et quand se produiront n'est-elle pas clair pour moi?


Pour moi, je suppose que chaque VM a à la fois une limite supérieure pour la taille du tas et une limite supérieure pour la longueur d'un tableau (indépendant de sa taille en octets). Mais c'est une supposition seulement.


Voilà des dragons! long [] l = nouveau long [2147483645]; Exceptions Message Lit - La taille de la matrice demandée dépasse la limite de VM Limite [] L = neuve [2147483644]; Exceptions Message Lit - Erreurs d'espace de tas Java Integer.max_Value = 2147483647 pour référence.


@Gorden, est votre analyse valable sur tous les systèmes? Combien de mémoire JVM avez-vous?


J'utilise simplement l'allocation de mémoire par défaut. Runtime.getrontime (). TotalMemory () est 85393408 octets, 85 Mo



0
votes

Juste à la recherche d'exemple pour les gens ont le problème qu'il semble se produire lorsque des personnes utilisent l'interface native Java, pont entre les applications C ++.

Lors de l'exécution de l'application PURE Java, la procédure standard semble affecter un tableau consiste à calculer les octets nécessaires de la variable de taille passée dans la décélération de la matrice Jouant un Java.lang.outofMemoryError: espace de tas Java Exception.

Lorsque le tableau est créé à l'extérieur du JVM, il semble que cela génère cette autre exception. Je suis sûr qu'il y a une raison technique de ce comportement différent.

Vous pouvez essayer de reproduire le problème que cette personne décrit sur ce Autre forum .


1 commentaires

Merci d'avoir répondu. Mais le lien du forum ne dit pas pourquoi cela se produit? La limite VM est-elle plus concernée par la mémoire natale que la mémoire VM?