コードを書いて何度も実行しましたが、突然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)
まあ、それはかなり自明です:あなたはメモリを使い果たしました。
-Xmxフラグを使用して、より多くのメモリで起動してみてください。
Java -Xmx2048m [whatever you'd have written before]
これは、最大2ギガのメモリを使用します。
詳細については 非標準オプションリスト をご覧ください。
メモリ不足です。 -Xmx256m
をJavaコマンドラインに追加してください。256m
はJVMに与えるメモリの量(256メガバイト)です。通常はデフォルトで64m
。
-Xmx1024m -XX:MaxPermSize = 512m -Xms512m
サーバーのパラメーターにこのパラメーターを引数として追加します
Javax.media.j3dについては知らないので、間違えているかもしれませんが、通常はメモリリークがあるかどうかを調査する必要があります。他の人が指摘しているように、64MBで3Dで何かをしている場合、明らかに小さすぎるかもしれません...
しかし、私があなただったら、プロファイラーまたは visualvm をセットアップし、アプリケーションを長時間(日、週...)実行します。次に、ヒープ割り当て履歴を確認し、 メモリリークではないことを確認してください 。
JProfilerやNetBeans IDEなどに付属しているもの)などのプロファイラーを使用する場合、どのオブジェクトが蓄積されているかを確認し、何が起こっているかを追跡できます。コレクションから何かが誤って削除されていない...
逆アセンブルされたAPK
をAPKツールで再コンパイルする場合:
メモリ割り当てをもう少し大きく設定するだけです
スイッチを設定-Xmx1024m
to -Xmx2048m
Java -Xmx2048m -jar signapk.jar -w testkey.x509.pem testkey.pk8 "%APKOUT%" "%SIGNED%"
あなたは行ってもいい.. :)