2016-01-05 31 views
1

我有一个新手问题。这是Android studio中内存选项卡的屏幕截图。有人可以提供一些有关可接受内存消耗的近似数据吗?是否有限制最大内存使用的界限?我应该担心分配的内存是否在11Mb左右?可接受的libgdx内存消耗

enter image description here

+0

大多数游戏将使用超过11mb的方式,所以你应该没问题。在开发过程中记住可用内存的数量。如果你需要它,请求一个大堆(我相信在androidmanifest中)也会给你更多的内存。 – JonasCz

+0

16MB是一些真正旧设备的限制。可能不在任何少于三四岁的设备上。该限制仅适用于Java堆。本机内存不受每个应用的限制。游戏中绝大多数内存可能来自你的纹理和像素图的本地内存。大多数Java内存使用可能来自您的代码(类,枚举,原语),也许听起来像是。如果你使用Proguard,你可能会看到它会下降很多,因为你没有使用所有的Libgdx类。 – Tenfour04

+0

感谢您的意见。我注意到在某些设备上分配的内存较低。这是为什么?在一台设备上,分配的内存仅为4Mb,启动后应用程序崩溃,屏幕上未显示错误消息。分配的内存是否可能降低并导致崩溃?这个问题可以在这里找到http://stackoverflow.com/questions/34616201/libgdx-game-crashes-on-some-devices – brumbrum

回答

2

它似乎像你没有太多的可用内存,并且分配的内存应该更多。我遇到了同样的问题,这是因为我没有正确关闭游标,也是因为我没有回收位图存储器,而是从文件中获取图形,而不是从可绘制资源中获取图形。你可以告诉你有多少内存可用于你的应用程序:

ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE); 
    int memoryClass = am.getMemoryClass(); 
    Runtime rt= Runtime.getRuntime(); 
    long maxMemory = rt.maxMemory(); 
    long freeMemory = rt.freeMemory(); 
    Log.d("Memory Available", "memoryClass:" + Integer.toString(memoryClass)); 
    Log.d("Max Memory Available", "max memory:" + Long.toString(maxMemory)); 
    Log.d("Free Memory", "Free Memory: " + Long.toString(freeMemory)); 
+0

谢谢你停下来。我注意到,当应用程序在不同的设备上运行时,分配的内存会有所不同。你有没有机会知道为什么会发生这种情况? – brumbrum

+0

@ krompir2 - 对于我的应用程序,分配的内存各不相同,具体取决于设备。 Note 3比Nexus 7表咀嚼了3倍的内存分配。 –