現在、4D の球/平面上の巨大なベクトル フィールド (> 250'000) を視覚化するアプリケーションを開発しています。プロセスを高速化するために、頂点、法線、および色に VBO を使用しています。GPU に送信する前にデータを準備するために、バッファ (FloatBuffer、ByteBuffer など) を使用しています。
シリンダーへのデータ: 各シリンダーは 16 * 9 + 16 * 3 = 192 float -> 192 * 4 バイト = 768 バイトを使用します。
頂点を送信した後、次のクリーンアップを行っています。
// clear all buffers
vertexBufferShell.clear();
indexBufferShell.clear();
vertexBufferShell = null;
indexBufferShell = null;
JConsole で監視したところ、GarbageCollector が「正しく」実行されていないことがわかりました。シリンダ数を減らしても、メモリは解放されません。JConsole Monitoring Tool には、GC を実行するためのボタンがあり、手動で行うとメモリが解放されます (大量のシリンダーをロードして大幅に減らすと、GC によって 600MB 以上がクリーンアップされることがあります)。
JConsole のイメージは次のとおりです。
![JConsole 出力、[GC の実行] ボタンを押した後にメモリがクリーンアップされる](https://i.stack.imgur.com/cmG6n.png)
問題は、コード内でこのバッファを自分でクリーンアップするにはどうすればよいかということです。clear メソッドを呼び出して参照を null に設定するだけでは不十分です。System.gc()の呼び出しも試みましたが、効果はありませんでした。何か考えはありますか?