我正在调试我使用 libGdx 库和 eclipse 编写的游戏。我有一个巨大的内存泄漏,所以我在我的渲染循环中注释掉了行,直到我在那里什么都没有。但是应用程序的内存仍然在上升。我最终使用 GTX 设置 UI 创建了一个全新的项目。当我启动它时,发生了完全相同的事情。它仍在以大约 100 万的速度上升。每秒 4 KB。不多,但就是停不下来。在查看堆数据时,我看到有 com.badlogic.gdx.backends.lwjgl.LwjglInput 可能是它的原因。但是我什至不知道我是否应该改变一些东西,当这个“问题”甚至出现在由 GTX 设置 UI 创建的项目中时。这对于应用程序来说是正常的吗?我一直等到它从 34'800K 上升到 40'000K,所以它可能永远不会停止。这最终会导致 OutOfMemory 异常吗? (顺便说一句。我使用 Windows 任务管理器来获取 RAM 值。而且我使用的是 Eclipse)
最佳答案
不一定是内存泄漏。垃圾收集器何时被触发可能是非常随机的,有时很长一段时间都不会发生。特别是如果只有 4kb/s 被分配。 GC 的触发还取决于您运行的 JVM。Android 上的 Dalvik 可能会更早触发它。
当你自己尝试时,调用 System.gc()
自己触发 GC 证明它不是内存泄漏,而只是一个懒惰的垃圾收集器。
在桌面上(LWJGL 后端意味着仅桌面)这不是很重要,因为您不会感觉到垃圾收集器。在移动后端,我希望 libgdx 开发人员对新实例更加小心,这意味着他们可能会比在其他后端更多地使用池,以尽可能避免垃圾收集器。
关于java - 空 LibGdx 游戏循环泄漏内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20976483/