繁体   English   中英

OpenGL,Java和内存管理

[英]OpenGL, Java and memory management

在Java中使用openGL(在类似于jogl的绑定中)时,您是否需要担心内存管理? JVM是否对创建的openGL对象进行垃圾回收? 如果是这样,进行清理的最佳方法是什么?

在像JOGL这样的OpenGL的低级绑定中(但对于Java3D这样的库,可能不需要那么多),您确实必须管理纹理等资源并通过调用glDelete函数来自己缓冲。

OpenGL会在需要渲染时将纹理移入和移出视频内存。 Java垃圾收集器没有一种实际的方式来收集这些资源,因为一旦将它们移交给OpenGL,它们就不会被表示为Java对象。 是的,这意味着您必须保留OpenGL使用的资源列表。

好消息是,您可以向OpenGL中加载比您想象的更多的资源,因为它会在需要时将它们交换到视频内存,而在不需要时交换回主内存。 坏消息是,可用于渲染帧而没有这种“颠簸”的资源(例如纹理)的大小和数量仍然存在实际限制。

我认为这有点取决于“胶水”或绑定,以及它如何选择实现所有权。

通常,我希望绑定遵循OpenGL语义,这意味着JVM不参与垃圾收集OpenGL库所保存的数据。

在很多情况下,例如纹理上载,我认为这是唯一可行的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM