我一直在为客户端和服务器开发一个使用libgdx的多人游戏。为了使服务器无头运行,我不得不使用mockito来模拟OpenGL上下文,如下所示:
Gdx.gl = Mockito.mock(GL20.class, Mockito.withSettings().stubOnly());
new HeadlessApplication(new MainServer(true), config);
但是我注意到5~6小时后服务器崩溃并显示以下消息:
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "HeadlessApplication"Exception in thread "Server"
由于它似乎是内存泄漏,我立即启动了 eclipse MAT(内存分析工具(,结果非常简单:MAT Repport
我在谷歌上搜索"Mockito内存泄漏",我发现我可以尝试像上面一样使用Mockito.withSettings().stubOnly()
选项,但我仍然遇到了问题。实际上,设置此选项后,链接中的屏幕截图已完成。我想知道是否有人可以向我解释这个问题,是否有任何方法可以解决它?
我终于设法避免使用Mockito。由于我只需要模拟 Gdx.gl 并且不是出于测试目的,所以我只是创建了一个名为FakeGL20的虚拟类,它无需执行任何操作即可实现GL20接口。
然后我只是将这个新类分配给 Gdx.gl:Gdx.gl = new FakeGl20()
进行更改后,我没有任何内存泄漏问题。
希望有一天这对某人有所帮助。