增加Android应用程序中可用内存的初始量

时间:2016-03-19 13:44:25

标签: java android memory-management garbage-collection

我想知道这是否可行。我的目的是在长时间处理期间减少GC操作的数量。

在Android应用程序中,我使用以下命令检查可用和最大堆大小:

Runtime runtime = Runtime.getRuntime();
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);

System.out.println( "freeMemory: " + runtime.freeMemory() );
System.out.println( "maxMemory: " + runtime.maxMemory() );
System.out.println( "memoryClass: " + am.getMemoryClass() );

在LogCat的onCreate()方法中,它说:

freeMemory: 5678992
maxMemory: 50331648
memoryClass: 48

然后我执行一些长String个操作,在处理过程中我再次检查内存:

freeMemory: 1833176

(我不发布此处理的代码,因为在实际阶段我不执行Java代码优化,只使用内存。)

GC运行以释放内存。这会降低应用程序的速度:

GC_CONCURRENT freed 4760K, 42% free 7653K/13123K, paused 12ms+13ms, total 43ms
GC_CONCURRENT freed 2012K, 42% free 7688K/13123K, paused 12ms+2ms, total 31ms
GC_CONCURRENT freed 1839K, 42% free 7662K/13123K, paused 12ms+12ms, total 40ms

在处理结束时,空闲内存为:

freeMemory: 4605040

正如文件所说:

  • Runtime.freeMemory()

      

    返回堆上当前可用的字节数,而不扩展堆。

  • Runtime.maxMemory()

      

    返回堆可以扩展到的最大字节数。

据我所知,Runtime.maxMemory()显示了不应溢出的内存以阻止OutOfMemoryError。超过Runtime.freeMemory()数量只会导致自由记忆扩大。

因此,代码中的GC释放操作是由内存消耗操作后剩余的可用内存量较少引起的(当它说:freeMemory: 1 833 176时)。但是,可用内存的总量没有扩大,只能保持在相同的起始限制内。

我认为可用内存的初始量也不是很高(因为它显示onCreate()方法5 678 992)。如果我最初有大约10 MB的空闲时间,则GC不会发生,因此应用程序可以更快地执行处理。

所以问题是:有没有办法可以增加可用内存的初始量,以防止频繁的GC调用和内存扩展?

感谢。

1 个答案:

答案 0 :(得分:0)

在Mainifast.xml中使用此属性

android:largeHeap="true"