我构建了一个JavaFX(8) 3D应用程序,它从某个文件中读取数据并将其渲染到某个场景中。
为了渲染一个对象,我使用:
graphicsContainer.getChildren().add(some3dObject);当我注释掉这行用于禁用渲染的代码时,我发现根本没有内存泄漏。
但是当这行代码运行时,应用程序会消耗越来越多的内存。我每秒有30帧,每秒钟内存消耗增加约50MB。
这是当然的,尽管在我使用的帧之间:
graphicsContainer.getChildren().clear();我分配给graphicsContainer的3D对象是本地对象,不会保存在任何静态/全局范围内。它们仅另存为graphicsContainer的子项,每帧上都会清除这些子项。
似乎JavaFX-3D引擎中的某些东西并没有真正清理我的工作,尽管我每次都会删除graphicsContainer的子项。
你知道如何让JavaFX 3D引擎释放过去的3D对象和渲染吗?
发布于 2016-09-01 02:19:30
在我的场景中,所有帧都包含相同的3D对象集。帧与帧之间唯一变化的是这些对象的位置和变换。
我的解决办法是将我创建的每个3D对象(球体、圆柱体等)保存在某个数组中-然后在每一帧上,我只更改它们的位置和变换,而不是每次都创建新的Group和新的3D对象。
内存现在一直在220MB左右。
https://stackoverflow.com/questions/39254217
复制相似问题