Java LibGDX对内存使用感到困惑

时间:2016-08-28 19:32:00

标签: java android libgdx

您好我应该这样做:

new BitmapFont().draw("Hello World!");
new BitmapFont().draw("Hello Universe!");

BitmapFont font = new BitmapFont();
font.draw("Hello World!");
font.draw("Hello Universe!");

性能是否重要?

2 个答案:

答案 0 :(得分:2)

第一个选项不是更糟糕,它根本不是一个选项。它泄漏了记忆。如果您每帧都这样做,您的游戏会在手机上快速崩溃。

任何实现Disposable的东西绝对必须在丢失引用之前处理掉,否则就会泄漏。

对于大多数情况,第二种选择都没问题。如果你有几十个在每一帧上都有相同文本的字符串,你可以使用你从BitmapFont(someStringCache = new BitmapFontCache(bitmapFont);)创建的BitmapFontCaches,这样每次都不需要重新计算字符串的字形排列你画它。我不会为此烦恼,除非你发现你的游戏的帧率太低而且你已经将问题缩小到了CPU。

答案 1 :(得分:1)

绝对第二个选项更好,因为第一个选项在真正需要1时会创建2个对象。在小规模上这没关系,但是如果所有的Java调用都像第一个那样,垃圾收集器将花费更多的时间(更多的对象 - 更多的时间需要GC),如果构造器上的负载很重,它将显着减慢应用。

对象在内存中,因此需要更多内存的对象需要更多内存,这就是为什么libGDX希望每次实用时都重用相同的Batch对象。

它的可读性和可配置性也较差(如果你需要在BitmapFont中设置一些东西,最好这样做一次)。

您还应该检查实现Disposable的对象,您必须手动处理它们。 BitmapFont,Batch,Stage,Texture。