Java glfwSetScrollCallback,do to';cbfun&x27;内存泄漏?

Java glfwSetScrollCallback,do to';cbfun&x27;内存泄漏?,java,callback,user-input,lwjgl,glfw,Java,Callback,User Input,Lwjgl,Glfw,我只是好奇。。。在java GLFW 3.2中使用glfwSetScrollCallback(window,scrollfun)时,是否需要随时释放/删除回调,如glfwSetScrollCallback(window,null)?如果我不这样做,它会导致内存泄漏或使用量增加吗 我只是想确保我使用它时不会造成太多额外的压力。我知道我可以在某些时候使用它来禁用回调,这很好,对于多游戏构建来说也很方便。GLFW端没有任何东西会导致非释放窗口回调(如滚动回调)的内存泄漏,因为GLFW本身不拥有该内存。

我只是好奇。。。在java GLFW 3.2中使用
glfwSetScrollCallback(window,scrollfun)
时,是否需要随时释放/删除回调,如
glfwSetScrollCallback(window,null)
?如果我不这样做,它会导致内存泄漏或使用量增加吗


我只是想确保我使用它时不会造成太多额外的压力。我知道我可以在某些时候使用它来禁用回调,这很好,对于多游戏构建来说也很方便。

GLFW端没有任何东西会导致非释放窗口回调(如滚动回调)的内存泄漏,因为GLFW本身不拥有该内存。它只是一个保存在每个窗口变量中的函数指针(无论如何都存在,否则它是
NULL

从拥有回调对象内存的LWJGL端,将回调类实例化为实现回调Java接口的对象确实需要堆上JVM和堆外内存

当实例化回调对象(例如,
org.lwjgl.glfw.GLFWScrollCallback
)时,还必须调用其
free()
方法(继承自
org.lwjgl.system.NativeResource
),以释放分配的本机内存(lwjgl 3不使用
finalize()
机制)。目前,LWJGL 3使用
dyncall
库为生成的回调函数生成本机可执行代码

因此:您可以在GLFW窗口上注册和取消注册单个实例化回调对象,次数可以任意多,而不会出现任何问题。只需确保以线程安全的方式执行,只需在主线程上调用与窗口相关的函数即可。请参阅GLFW函数的文档。

“如何处理“cbfun”中的内存泄漏?”-???