在适用于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,然后在运行应用程序时,它抛出一个错误,指出“初始堆大小设置为大于最大堆大小的值”。 有人能告诉我我在这里放了什么错误的配置吗?还是我漏掉了什么?
对于堆排序,如果我们想按升序对数组排序,那么应该在最大堆还是最小堆中转换堆?