为什么Intellij在关闭项目后不释放内存?

时间:2016-10-09 05:23:33

标签: intellij-idea

我打开了三个项目。其中之一 - Spark - 非常大。关闭spark后,内存使用量没有差异 - 正如os / x活动监视器所报告的那样。注意:所有项目都在同一个Intellij实例中打开。

enter image description here

实际上它只使用了4GB以上。我只现在打开了两个项目。如果我关闭Intellij并重新启动它,那么这两个项目只占用1.5GB。

那么......如何“鼓励”Intellij释放它正在使用的内存?它的运行速度非常慢(例如,无法跟上我的输入)

更新我刚刚关闭了其余两个项目中较大的一个。 STILL 内存使用量没有减少。剩下的项目是单个python文件。所以Intellij此时应该使用512Meg以下!

3 个答案:

答案 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配置。

How to free memory in Java?

  

延伸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

我用了这个:

显示当前堆级别和内存使用情况。状态栏中此部分的可见性由“设置/首选项”对话框的“外观”页面中的“显示内存指示符”复选框定义。默认情况下不显示。 点击内存指示器以运行垃圾收集器。