我打开了三个项目。其中之一 - Spark - 非常大。关闭spark后,内存使用量没有差异 - 正如os / x活动监视器所报告的那样。注意:所有项目都在同一个Intellij实例中打开。
实际上它只使用了4GB以上。我只现在打开了两个项目。如果我关闭Intellij并重新启动它,那么这两个项目只占用1.5GB。
那么......如何“鼓励”Intellij释放它正在使用的内存?它的运行速度非常慢(例如,无法跟上我的输入)
更新我刚刚关闭了其余两个项目中较大的一个。 STILL 内存使用量没有减少。剩下的项目是单个python文件。所以Intellij此时应该使用512Meg以下!
答案 0 :(得分:4)
跟进@ PeterGromov的回答似乎很难来获取内存。另外@KevinKrumwiede提到Energy
似乎是一条大道。
以下是一些距离Does GC release back memory to OS?
更远的想法HotSpot JVM会将内存释放回操作系统,但是会这样做 勉强。
您可以通过设置-XX:GCTimeRatio = 19来使其更具攻击性 -XX:MinHeapFreeRatio = 20 -XX:MaxHeapFreeRatio = 30这将允许它花费更多的CPU时间来收集和约束数量 GC循环后分配但未使用的堆内存。
此外,使用Java 9 -XX:可以使用-ShrinkHeapInSteps选项 应用前两个选项引起的收缩更多 积极。相关的OpenJDK错误。
请注意,缩小的能力和行为取决于所选择的 垃圾收集器。例如,G1只获得了屈服的能力 使用jdk8u20在堆中间备份未使用的块。
因此,如果需要进行堆缩,则应针对特定进行测试 JVM版本和GC配置。
延伸Yiannis Xanthopoulos和Hot的回答和评论 舔(对不起,我还不能发表评论!),你可以像这样设置VM选项 例如:
-XX:+ UseG1GC -XX:MinHeapFreeRatio = 15 -XX:MaxHeapFreeRatio = 30在我的jdk 7中,如果超过30%的堆,这将释放未使用的VM内存 当VM空闲时,在GC之后变为空闲。你可能需要 调整这些参数。
虽然我没有在下面的链接中看到它,但请注意一些 垃圾收集器可能不遵守这些参数,默认情况下为java 如果您碰巧有多个,可以为您选择其中一个 core(因此上面的UseG1GC参数)。
我要将XX:MaxHeapFreeRatio
添加到IJ并报告是否有帮助。
我们的应用程序目前仅在Java7上运行,因此上面的第一种方法尚未可行 - 但由于我们的应用程序很快就会转向jdk8,因此有希望。
答案 1 :(得分:1)
底层Java虚拟机仅支持增加其堆。因此,即使在关闭所有项目之后,IDE并不需要所有项目,它仍然会被分配并计算在操作系统中使用。
答案 2 :(得分:0)
https://www.jetbrains.com/help/idea/status-bar.html
我用了这个:
显示当前堆级别和内存使用情况。状态栏中此部分的可见性由“设置/首选项”对话框的“外观”页面中的“显示内存指示符”复选框定义。默认情况下不显示。 点击内存指示器以运行垃圾收集器。