几年后,我再次使用IDEA进行开发,到目前为止我很高兴。问题只是我在做项目时奇怪的内存使用行为和GC操作,这导致我的IDE在GC工作时冻结了几秒钟。不管这个项目有多大,我正在处理,几天后内存使用量就会增加到500 MB(我的堆空间最大为512 MB,实际上,我认为,对于拥有大约100个java文件的web项目来说,这必须足够了)。GC完成工作后,我使用了400 MB,而不是收集,堆上只有大约100 MB的空闲空间,几分钟后内存使用量增加,堆又满了。
JVM version is 19.0-b09
using thread-local object allocation.
Parallel GC with 2 thread(s)
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 536870912 (512.0MB)
NewSize = 178257920 (170.0MB)
MaxNewSize = 178257920 (170.0MB)
OldSize = 4194304 (4.0MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 16777216 (16.0MB)
MaxPermSize = 314572800 (300.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 145489920 (138.75MB)
used = 81242600 (77.4789810180664MB)
free = 64247320 (61.271018981933594MB)
55.84070704004786% used
From Space:
capacity = 16384000 (15.625MB)
used = 0 (0.0MB)
free = 16384000 (15.625MB)
0.0% used
To Space:
capacity = 16384000 (15.625MB)
used = 0 (0.0MB)
free = 16384000 (15.625MB)
0.0% used
PS Old Generation
capacity = 358612992 (342.0MB)
used = 358612992 (342.0MB)
free = 0 (0.0MB)
100.0% used
PS Perm Generation
capacity = 172621824 (164.625MB)
used = 172385280 (164.3994140625MB)
free = 236544 (0.2255859375MB)
99.86296981776765% used
这就是我的堆空间。值得注意的是,老一代和老一代几乎100%使用他们的空间。但我已经手动触发GC好几次了。问题是,在不启动IDE的情况下,如何让IDE在旧一代中扫描这些对象?(启动后,内存使用量约为60MB-90MB)我如何才能知道这些是什么?有一些线程正在运行,可以在VisualVM中观看,如RMI TCP Connection、RMI TCP Accept、XML RPC Weblistener等等,尽管我在IDE上什么都不做,它们仍然每秒消耗5-10 MB的内存。
$ uname -a
Linux bagdemir 2.6.32-28-generic #55-Ubuntu SMP Mon Jan 10 21:21:01 UTC 2011 i686 GNU/Linux
$ java --version
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Server VM (build 19.1-b02, mixed mode)
更新:内存配置:-Xms256m-Xmx512m-Xmn170m-XX:MaxPermSize=300m
您可能会发现这很有用:Intellij Idea JVM选项基准:默认设置是最差的
正确的方法是获取内存快照,并在附带快照的情况下向JetBrains跟踪器提交相应的票证。
过量内存使用一直持续到2019年4月2日。默认情况下,IntelliJ IDEA Ultimate Edition默认启用了131个插件。
我关闭了大约50个插件。
转到文件>>设置>>插件管理插件。然后单击已安装查看已激活的插件。