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)
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.
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
.
-Xmx1024m -XX: MaxPermSize = 512m -Xms512m
Ajoutez ce paramètre comme argument dans les paramètres de votre serveur
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 ...
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 .. :)