0

我构建了一个 JavaFX(8) 3D 应用程序,它从某个文件中读取数据并将其呈现在某个场景中。

为了渲染一个对象,我使用:

graphicsContainer.getChildren().add(some3dObject);

当我注释掉这一行时,为了禁用渲染,我根本没有内存泄漏。

但是当这条线运行时,应用程序会消耗越来越多的内存。我每秒有 30 帧,每秒内存消耗增加约 50MB。

这当然是,尽管在我使用的帧之间:

graphicsContainer.getChildren().clear();

我分配给的 3D 对象graphicsContainer是本地的,不会保存在任何静态/全局范围内。它们仅保存为 的子级graphicsContainer,在每一帧上都会被清理。

尽管我每次删除graphicsContainer.

知道如何让 JavaFX 3D 引擎释放过去的 3D 对象和渲染吗?

4

1 回答 1

0

在我的场景中,所有帧都包含相同的 3D 对象集。唯一会随着帧的变化而变化的是这些对象的位置和变换。

我的解决方法是将我创建的每个 3D 对象(球体、圆柱体等)保存在某个数组中 - 然后在每一帧上,我只是更改它们的位置和变换,而不是Group每次都创建新的和新的 3D 对象。

内存现在一直在 220MB 左右。

于 2016-08-31T18:19:30.300 回答