Java 3D には、約 3500 個のスイッチを含むグループから構成される大きなシーン グラフがあり、それぞれに Shape3D とグループが含まれており、後者にはさらに 2 つの Shape3D が含まれています。
このセットアップの理由は、各 3500 スイッチを完全に非表示にするか、2 つの子のいずれかを表示できるようにする必要があるためです。
この問題は、スイッチのグループにある 2 つの Shape3D のジオメトリを変更しようとすると発生します。私は次のことを試みました:
グループを BranchGroup に変更します。ジオメトリを変更する必要がある場合は、BranchGroup をデタッチし、更新されたジオメトリで新しいものを作成して置き換えます。大量のメモリをリークします。たとえば、最初のメモリ使用量は約 100 MB です。後でジオメトリを変更すると、約 400 MB になります。
ジオメトリを編集可能にします。ジオメトリを変更する必要がある場合は、直接編集します。大量のメモリをリークします。上記と同様。
ジオメトリを編集可能にしますが、参照によって行います。ジオメトリを変更する必要がある場合は、適切な GeometryUpdater を指定して updateData(...) を呼び出します。メモリリークします。
シーン グラフ全体を再作成します。ジオメトリを変更する必要がある場合は、シーン グラフ全体をデタッチし、更新されたジオメトリを使用して最初から再作成し、新しいシーン グラフをアタッチします。メモリリークします。
Java 3D メモリー管理について何か基本的なことが欠けているように感じずにはいられません。それは私のすべての試みに共通しています。
ジオメトリを変更する速度は、まれにしか発生しないため、問題ではありません。ただし、メモリの問題は深刻です。