web-dev-qa-db-ja.com

スレッド「メイン」Java.lang.OutOfMemoryErrorの例外:Javaヒープスペース

コードを書いて何度も実行しましたが、突然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

まあ、それはかなり自明です:あなたはメモリを使い果たしました。

-Xmxフラグを使用して、より多くのメモリで起動してみてください。

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

これは、最大2ギガのメモリを使用します。

詳細については 非標準オプションリスト をご覧ください。

58
Jon Skeet

メモリ不足です。 -Xmx256mをJavaコマンドラインに追加してください。256mはJVMに与えるメモリの量(256メガバイト)です。通常はデフォルトで64m

3
Keith Randall

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

サーバーのパラメーターにこのパラメーターを引数として追加します

3
borchvm

Javax.media.j3dについては知らないので、間違えているかもしれませんが、通常はメモリリークがあるかどうかを調査する必要があります。他の人が指摘しているように、64MBで3Dで何かをしている場合、明らかに小さすぎるかもしれません...

しかし、私があなただったら、プロファイラーまたは visualvm をセットアップし、アプリケーションを長時間(日、週...)実行します。次に、ヒープ割り当て履歴を確認し、 メモリリークではないことを確認してください

JProfilerやNetBeans IDEなどに付属しているもの)などのプロファイラーを使用する場合、どのオブジェクトが蓄積されているかを確認し、何が起こっているかを追跡できます。コレクションから何かが誤って削除されていない...

3
Enno Shioji

逆アセンブルされたAPKをAPKツールで再コンパイルする場合:

メモリ割り当てをもう少し大きく設定するだけです

スイッチを設定-Xmx1024mto -Xmx2048m

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

あなたは行ってもいい.. :)

2
Kaleem Ullah