【问题标题】:What is the objective of setting the minimum heap size in an android app?在 android 应用程序中设置最小堆大小的目的是什么?
【发布时间】:2010-12-03 20:09:53
【问题描述】:

在 google 的 Android OS 日历应用中,您会在CalendarActivity 的 onCreate 方法中遇到这一行。

// Eliminate extra GCs during startup by setting the initial heap size to 4MB.
VMRuntime.getRuntime().setMinimumHeapSize(INITIAL_HEAP_SIZE)

谁能解释为什么将其设置为 4MB 会消除 GC?

【问题讨论】:

    标签: java android mobile


    【解决方案1】:

    JVM 通常从分配相对较小的堆开始。然后在每次 GC 运行后,它会检查有多少可用的堆内存。如果空闲堆与总堆的比例太小,JVM 就会向堆中添加更多内存(直到配置的最大堆大小)。

    第二个相关事实是,当有大量内存需要回收时,GC 运行效率最高。如果您没有遇到整体系统资源限制(例如触发分页或交换),则通过运行大堆而不是小堆可以获得更好的应用程序性能。

    假设应用程序编写者知道应用程序很可能需要给定数量的堆(例如 4Mb)才能舒适地运行。通过将该大小设置为最小堆大小意味着当堆填满(例如)1Mb、2​​Mb 和 3Mb 时,JVM 不需要运行 GC。因此,JVM 在应用程序启动和正常运行期间运行垃圾收集器的次数更少,应用程序启动速度更快,用户看到的 GC 暂停更少。

    【讨论】:

    • 分析器是否有助于估计初始启动堆需求?
    • 不是直接的。假设您在应用程序“启动”时拍摄的快照上运行分析器。这告诉你对象在那个时候是如何存在的,但不是 1)最大工作集是引导期间,或 2)当应用程序开始做事时将消耗多少额外内存。简而言之,引导后的工作集大小可能是一个糟糕的估计。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 2022-11-08
    相关资源
    最近更新 更多