在 Android 操作系统的谷歌日历应用程序中,您会在 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)才能舒适地运行。通过将该大小设置为最小堆大小,意味着 JVM 不需要在堆填满(例如)1Mb、2Mb 和 3Mb 时运行 GC。因此,JVM 在应用程序启动和正常运行期间运行垃圾收集器的次数更少,应用程序启动更快,用户看到的 GC 暂停更少。
关于java - 在 Android 应用程序中设置最小堆大小的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1518154/