Я написал код, и я выполняю его много, но внезапно я добрался 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)
У вас закончилась память. Попробуйте добавить -Xmx256m
в свою командную строку java. 256m
- это объем памяти, предоставляемый JVM (256 мегабайт). Обычно по умолчанию 64 м
.
Что ж, это говорит само за себя: у вас закончилась память.
Вы можете попробовать запустить его с большим объемом памяти, используя флаг -Xmx, например
java -Xmx2048m [whatever you'd have written before]
Это займет до 2 гигабайт памяти.
Подробнее см. список нестандартных опций .
Я не знаю о javax.media.j3d, поэтому могу ошибаться, но обычно вы хотите выяснить, есть ли утечка памяти. Что ж, как отмечают другие, если это было 64 МБ, и вы что-то делаете с 3d, возможно, он явно слишком мал ...
Но на вашем месте я бы установил профилировщик или visualvm , и пусть ваше приложение будет работать в течение длительного времени (дни, недели ...). Затем посмотрите историю распределения кучи и убедитесь, что это не утечка памяти .
Если вы используете профилировщик, такой как JProfiler или тот, который поставляется с IDE NetBeans и т. Д., Вы можете увидеть, какой объект накапливается, а затем отследить, что происходит ... Ну, почти всегда что-то неправильно не удаляется из коллекция ...