当前位置: 首页 > 面试题库 >

在Android应用中设置最小堆大小的目的是什么?

蓬弘
2023-03-14
问题内容

在适用于Android
OS的Google日历应用中,您会在CalendarActivity的onCreate方法中遇到此行。

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

有人可以解释为什么将其设置为4MB会消除GC吗?


问题答案:

JVM通常从分配较小的堆开始。然后,在每个GC运行之后,它将检查以查看有多少可用堆内存。如果可用堆与总堆的比率太小,那么JVM将向堆中添加更多内存(最大配置堆大小)。

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

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



 类似资料:
  • 我是Java的初学者,刚开始使用Intellij作为我的IDE。 当我使用它时,有时会延迟。 我更改了我的 xms 和 xmx 以获得更大的堆大小(xms = 1024,xmx = 2048),但它抛出了一个错误。 所以,我把它回滚了。 错误消息是这样的:“初始堆大小设置为大于最大堆大小的值”。 有什么问题? 如果可能,如何增加最大堆大小? 我用的是笔记本电脑,它有8GB内存。x64Intelli

  • 问题内容: 当前,在我们的测试环境中,最大和最小JVM堆大小设置为相同的值,基本上与专用服务器计算机为我们的应用程序所允许的大小相同。这是性能最佳的配置,还是给JVM一个更好的范围? 问题答案: 设置- Xms的主要原因是,如果您在启动时需要一定的堆。(防止OutOfMemoryErrors在启动时发生。)如上所述,如果您需要启动堆来匹配最大堆,则是匹配它的最大时间。否则,您将不需要它。只是要求应

  • 我正在使用IntelliJ 2020.1 Ultimate,并且有一个JBoss 7.0.2服务器,我想从IntelliJ运行。 我将其添加为配置: 但是当我尝试启动服务器时,我收到以下错误: IDEA.app/Contents/plugins/Kotlin/lib/jps/kotlin-jps-plugin.jar:/Applications/IntelliJ IDEA.app/Contents

  • 问题内容: 这是 不是 增加Java的堆的最大尺寸的虚拟机启动后。技术原因是什么?垃圾回收算法是否取决于要使用固定数量的内存?还是出于安全原因,通过消耗所有可用内存来防止Java应用程序从DOS的系统中移至其他应用程序? 问题答案: 最后我知道在Sun的JVM中,必须在连续的地址空间中分配整个堆。我想对于大堆值,很难在启动后将其添加到您的地址空间中,同时又要确保它保持连续。您可能需要在启动时获取它

  • 我遇到了我最近升级到的Intellij 2019.2.1版本的问题。我已经在智能帮助中设置了Xms和Xmx - 现在,当我启动应用程序时,在应用程序的VM参数中,我传递-Xmx800m,然后在运行应用程序时,它抛出一个错误,指出“初始堆大小设置为大于最大堆大小的值”。 有人能告诉我我在这里放了什么错误的配置吗?还是我漏掉了什么?

  • 对于堆排序,如果我们想按升序对数组排序,那么应该在最大堆还是最小堆中转换堆?