gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:48:12 24 4
gpt4 key购买 nike

我想知道这是否可行。我的目的是减少长时间处理过程中 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()

    Returns the number of bytes currently available on the heap without expanding the heap.

  • Runtime.maxMemory()

    Returns the maximum number of bytes the heap can expand to.

据我了解,Runtime.maxMemory()显示不应溢出的内存,以防止OutOfMemoryError。超过 Runtime.freeMemory() 数量只会导致可用内存扩大。

因此,我的代码中的 GC 释放操作是由内存消耗操作后剩余的可用内存量较少引起的(当它显示:freeMemory: 1 833 176)。但可用内存总量并未扩展,只是释放以保持在相同的起始限制内。

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

<小时/>

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

谢谢。

最佳答案

在 Mainifast.xml 中使用此属性

android:largeHeap="true"

关于java - 增加 Android 应用程序中的初始可用内存量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36102513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com