eclipse中的项目越来越多,每次启动eclipse速度变慢,并且eclipse经常莫名其妙退出。
另外今天在进行下图操作时,eclipse也莫名其妙退出,之前也已经发生过多次这样的情况:
查看eclipse安装目录下的dump文件(eclipse莫名其妙退出或崩溃都会自动Dump):
怀疑是内存问题,于是查看日志中堆内存使用情况:
可以看到PermGen内存基本上被耗尽,于是打开eclipse.ini查看vm args:
可以看到只配置了初始堆内存和最大堆内存,没有显式配置PermGen大小。从上面的Dump文件可以看到JVM为PermGen分配了大概97536KB,约为95MB。于是调大堆内存,并设置一个大些的PermGen,如下:
重新打开eclipse,再次跳转,莫名其妙退出现象消失了。
我们知道,PermGen主要存的类信息、方法信息以及字符串常量池等。而如果eclipse中项目一多,必然类信息、方法信息等占据更大的内存,所以因为PermGen空间不足而导致eclipse频繁退出就容易理解了。另外在跳转时,我猜eclipse后台进程必然也要加载一个Class Hierachy层次结构到内存中,同样也会增加PermGen空间消耗,然后同样导致eclipse莫名其妙退出。解决方案除了上面的调eclipse JVM参数外,还可以将一个workspace中的几十项目分到几个workspace中,每个workspace的项目不要太多。可以在eclipse启动参数中加入-data参数指定workspace,然后将多个项目分到几个workspace(这招是请教同事学到的,嘿嘿):