【发布时间】:2017-06-30 04:14:10
【问题描述】:
我已经用谷歌搜索,但似乎无法找到如何确定供应商已将 Android java 堆设置为的最大堆。我知道如何从这个很棒的线程中获取应用程序应该使用的最大堆和最大堆: Android heap size on different phones/devices and OS versions
但是当我运行这两种方法并将结果与 Android Studio Memory Profiler gc 的结果进行比较时,它是 ActivityManager getMemoryClass 所说值的一半。所以我怀疑供应商将其设置为低于该值。我有一台 LG G4,getMemoryClass 显示为 256MB,但我发现 GC 发生在 128MB 左右。
【问题讨论】:
-
嗯,垃圾回收不会等到你达到堆限制。毕竟,设备上还有其他应用程序在争夺相同的内存。
-
谢谢,我知道对于 Oracle JVM,它有一个公式,似乎在收集时指示 90% 的最大值。我看到了一个不错的锯齿波形,但它永远不会超过 128MB。我的应用程序确实使用了很多应该超过 128MB 的图像,但我从来没有看到这种情况发生。不过我会仔细看的。
-
我进行了压力测试,果然有 128MB 的硬限制。我正在尝试根据可用堆而不是从配置文件中获取某些内容来调整内存使用情况。如果供应商设置的限制不是基于上面链接中提到的两种方法,我想以编程方式知道那是什么。
-
我想知道最大堆是否意味着java加本机?
标签: android memory heap-memory