【问题标题】:Is the use of glDelete* necessary when using LWJGL使用 LWJGL 时是否需要使用 glDelete*
【发布时间】:2019-08-04 15:44:26
【问题描述】:

我目前正在从事一个涉及 LWJGL 的项目。我知道在 C 和 C++ 中应该调用如下函数:glDeleteBuffersglDeleteVertexArrays 等来释放内存。但是,Java 有一个垃圾收集器,这通常意味着当 JVM 关闭时所有内存都会被释放。 使用Java时需要调用glDelete*吗? 也许我应该只为不再需要的对象调用这些函数来提高性能。

【问题讨论】:

  • 当 JVM/进程停止时,不是 GC 会处理资源。它是操作系统的进程管理器。
  • 这是有道理的。因此,当 JVM 进程停止时,操作系统会自动释放 GPU 上的内存。因此不需要在进程结束时手动释放内存?
  • 操作系统卸载驱动程序共享库,这些库中的挂钩通知驱动程序此卸载,驱动程序将处理进程持有的任何资源。是的。因此,您也不必在 C/C++ 程序中处理任何 GL 资源。

标签: java performance opengl memory lwjgl


【解决方案1】:

OpenGL 对象不是 Java 垃圾收集方案的一部分,我的理解是 LWJGL 不会尝试将它们包装在可以自动收集它们的东西中(因为这将非常困难)。

任何你不删除的 OpenGL 对象最终都会在你的程序终止时被销毁,所以主要的问题是如果你运行你的应用程序一段时间并且只是把你不使用的东西放在地板上删除它们。对于只是在开始时加载一些东西并运行的简单应用程序,这很好。对于任何非常复杂的东西,您都必须花时间删除不使用的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 2011-12-08
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多