Java glfwSetScrollCallback,对 'cbfun' 内存泄漏做些什么?
Java glfwSetScrollCallback, do to 'cbfun' for Memory Leaks?
我只是好奇...在 java、GLFW 3.2 中使用 glfwSetScrollCallback(window, scrollfun)
时,我是否需要随时 release/remove 回调,如 glfwSetScrollCallback(window, null)
?如果我不这样做会导致内存泄漏或增加使用率吗?
我只是想确保我在使用它时不会造成太多额外的压力。我确实知道我可以使用它来禁用在特定时间获取回调,这很好,并且对多游戏构建等有点方便。
在 GLFW 方面没有任何东西可能导致未释放的 window 回调的任何内存泄漏,例如滚动回调,因为 GLFW 本身不 own[=26= 】 那段记忆。它只是一个保存在每个 window 变量中的函数指针(无论如何都存在 - 否则它是 NULL
)。
从拥有回调对象内存的 LWJGL 端,将回调 class 实例化为实现回调 Java 接口的对象确实需要 JVM 堆上和堆外-堆内存。
当您实例化回调对象(例如 org.lwjgl.glfw.GLFWScrollCallback
)时,您 必须 也调用它的 free()
方法(继承自 org.lwjgl.system.NativeResource
) 以处理分配的本机内存(LWJGL 3 不使用 finalize()
机制)。目前,LWJGL 3 使用 dyncall
库为生成的回调函数生成本机可执行代码。
因此:您可以在 GLFW window 上多次注册和注销单个实例化回调对象,没有任何问题。只需在主线程上仅调用 window 相关函数,确保以线程安全的方式执行此操作即可。请参阅 GLFW 函数的文档。
我只是好奇...在 java、GLFW 3.2 中使用 glfwSetScrollCallback(window, scrollfun)
时,我是否需要随时 release/remove 回调,如 glfwSetScrollCallback(window, null)
?如果我不这样做会导致内存泄漏或增加使用率吗?
我只是想确保我在使用它时不会造成太多额外的压力。我确实知道我可以使用它来禁用在特定时间获取回调,这很好,并且对多游戏构建等有点方便。
在 GLFW 方面没有任何东西可能导致未释放的 window 回调的任何内存泄漏,例如滚动回调,因为 GLFW 本身不 own[=26= 】 那段记忆。它只是一个保存在每个 window 变量中的函数指针(无论如何都存在 - 否则它是 NULL
)。
从拥有回调对象内存的 LWJGL 端,将回调 class 实例化为实现回调 Java 接口的对象确实需要 JVM 堆上和堆外-堆内存。
当您实例化回调对象(例如 org.lwjgl.glfw.GLFWScrollCallback
)时,您 必须 也调用它的 free()
方法(继承自 org.lwjgl.system.NativeResource
) 以处理分配的本机内存(LWJGL 3 不使用 finalize()
机制)。目前,LWJGL 3 使用 dyncall
库为生成的回调函数生成本机可执行代码。
因此:您可以在 GLFW window 上多次注册和注销单个实例化回调对象,没有任何问题。只需在主线程上仅调用 window 相关函数,确保以线程安全的方式执行此操作即可。请参阅 GLFW 函数的文档。