我有一个 Java 3D 中的大型场景图,由一个包含大约 3500 个开关的组组成,每个开关包含一个 Shape3D 和一个组,后者包含另外两个 Shape3D。
这种设置的原因是 3500 交换机中的每一个都必须能够完全隐藏或使其两个子节点中的任何一个可见。
当我尝试在 Switch 中修改组中的两个 Shape3D 的几何图形时,就会出现问题。我尝试了以下方法:
将组更改为 BranchGroup。当需要更改几何图形时,我会分离 BranchGroup 并创建一个新的,并使用更新的几何图形来替换它。泄漏大量内存。例如,初始内存使用量约为 100 MB。后来几何形状发生变化,大约为 400 MB。
使几何图形可编辑。当需要更改几何图形时,我直接对其进行编辑。泄漏大量内存。与上面类似。
使几何图形可编辑,但通过引用。当需要更改几何图形时,我使用适当的 GeometryUpdater 调用 updateData(...),然后它会执行它的操作。泄漏内存。
重新创建整个场景图。当需要更改几何图形时,我会分离整个场景图,使用更新的几何图形从头开始重新创建它,然后附加新的场景图。泄漏内存。
我不禁觉得我缺少一些关于 Java 3D 内存管理的基本知识,而这对我的所有尝试都是常见的。
更改几何形状的速度不是问题,因为它很少发生。但是,内存问题很严重。