Java glfwSetScrollCallback, do to 'cbfun' for Memory Leaks?



我只是好奇。。。在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继承(,以便处理分配的本机内存(LWJGL3不使用finalize()机制(。目前,LWJGL3使用dyncall库为生成的回调函数生成本机可执行代码。

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

最新更新