Jac*_*ine 7 java mobile android
在Android操作系统的Google日历应用中,您将在CalendarActivity的onCreate方法中遇到此行.
// Eliminate extra GCs during startup by setting the initial heap size to 4MB.
VMRuntime.getRuntime().setMinimumHeapSize(INITIAL_HEAP_SIZE)
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么设置为4MB会消除GC吗?
Ste*_*n C 16
JVM通常从分配相对较小的堆开始.然后在每次GC运行后,它会检查有多少可用堆内存.如果可用堆与总堆的比率太小,则JVM将向堆中添加更多内存(最大配置堆大小).
第二个相关的事实是,当有大量内存需要回收时,GC运行效率最高.如果您没有遇到整体系统资源限制(例如,触发分页或交换),则通过运行大堆而不是小堆来获得更好的应用程序性能.
假设应用程序编写者知道应用程序很可能需要一定量的堆(例如4Mb)才能轻松运行.通过将该大小设置为最小堆大小意味着当堆填充(例如)1Mb,2Mb和3Mb时,JVM不需要运行GC.因此,JVM在应用程序启动和正常运行期间运行垃圾收集器的次数更少,应用程序启动速度更快,用户看到更少的GC暂停.