web-dev-qa-db-fra.com

Exception dans le thread "principal" Java.lang.OutOfMemoryError: Java heap space

J'ai écrit un code et je l'exécute beaucoup mais soudainement j'ai obtenu un OutOfMemoryError:

  Exception in thread "main" Java.lang.OutOfMemoryError: Java heap space
        at javax.media.j3d.BoundingBox.<init>(BoundingBox.Java:86)
        at javax.media.j3d.NodeRetained.<init>(NodeRetained.Java:198)
        at javax.media.j3d.LeafRetained.<init>(LeafRetained.Java:40)
        at javax.media.j3d.LightRetained.<init>(LightRetained.Java:44)
        at javax.media.j3d.DirectionalLightRetained.<init>(DirectionalLightRetained.Java:50)
        at javax.media.j3d.DirectionalLight.createRetained(DirectionalLight.Java:116)
        at javax.media.j3d.SceneGraphObject.<init>(SceneGraphObject.Java:119)
        at javax.media.j3d.Node.<init>(Node.Java:178)
        at javax.media.j3d.Leaf.<init>(Leaf.Java:50)
        at javax.media.j3d.Light.<init>(Light.Java:270)
        at javax.media.j3d.DirectionalLight.<init>(DirectionalLight.Java:87)
36
Johanna

Eh bien, c'est assez explicite: vous n'avez plus de mémoire.

Vous pouvez essayer de le démarrer avec plus de mémoire, en utilisant l'indicateur -Xmx, par ex.

Java -Xmx2048m [whatever you'd have written before]

Cela utilisera jusqu'à 2 Go de mémoire.

Voir la liste d'options non standard pour plus de détails.

58
Jon Skeet

Tu n'as plus de mémoire. Essayez d'ajouter -Xmx256m à votre Java. Le 256m est la quantité de mémoire à donner à la JVM (256 mégaoctets). Par défaut, il est 64m.

3
Keith Randall

enter image description here -Xmx1024m -XX: MaxPermSize = 512m -Xms512m

Ajoutez ce paramètre comme argument dans les paramètres de votre serveur

3
borchvm

Je ne connais pas javax.media.j3d, donc je peux me tromper, mais vous voulez généralement vérifier s'il y a une fuite de mémoire. Eh bien, comme d'autres le notent, si c'était 64 Mo et que vous faites quelque chose avec la 3D, c'est peut-être évidemment trop petit ...

Mais si j'étais vous, je vais mettre en place un profileur ou visualvm , et laisser votre application s'exécuter pendant une période prolongée (jours, semaines ...). Ensuite, regardez l'historique d'allocation de tas, et assurez-vous que ce n'est pas une fuite de mémoire .

Si vous utilisez un profileur, comme JProfiler ou celui fourni avec NetBeans IDE etc., vous pouvez voir quel objet s'accumule, puis suivre ce qui se passe. Eh bien, presque toujours quelque chose n'est pas correctement supprimé d'une collection ...

3
Enno Shioji

Si vous recompilez un APK démonté avec l'outil APK:

Il suffit de définir l'allocation de mémoire un peu plus grande

régler l'interrupteur -Xmx1024mà -Xmx2048m

Java -Xmx2048m -jar signapk.jar -w testkey.x509.pem testkey.pk8 "%APKOUT%" "%SIGNED%"

vous êtes prêt à partir .. :)

2
Kaleem Ullah