eclipse容易卡死或者较慢的解决方案

2019-06-20  本文已影响0人  greensure

问题:Eclipse经常卡住或Building workspace等待;

解决方案:

1. 取消掉“project -> Buiild Automatically”选项;

在启用时,每保存一下,eclipse就会自动为我们构建整个项目,这样对于大的项目来说,每次保存时都会造成很卡。其实自动构建完全没有必要,只要保证在运行前构建一次就ok了,eclipse也会在运行前自动为我们构建,所以关闭是最明智的选择。

2. 进入Windows->Preferences->Java->Editor->Hovers,然后关掉eclipse相关的hover选项;

3.window-->preferences 搜索startup找到startup and shutdown 关掉不需要的启动项

1.png

4. 在 Help->Software Updates->Manage Configration中unenable掉subclipse插件;

5. 取消各种文件的validation;

window-->preferences -->搜索validation找到validation 关掉不需要的validation项目

6.build很慢,如果js过多,会导致这个问题

解决方法:

右键点击项目-->properties-->搜索include path-->点击excluded-->edit-->exclusion patterns-->add-->在弹出的窗口中输入*
设置的作用:在项目build的时候排除javascript

7.编辑js非常卡时

window-->preferences, 搜索editors找到editors,点击fileassociations,在右边找到js,然后在下方的associated editors中找到spket,然后点击default即可;

还有一种方式:右键点击文件,在open with中选择spket。js文件可以选择spket,还不错。jsp则可以选择jsp editor

8. 在 Eclipse.ini文件中增加最大内存使用数量-vmargs-Xms40m-Xmx512m;

注:From : http://www.cfei.net/archives/445

首先了解下JVM中几个相关的概念:

Xms:最小堆大小

Xmx:最大堆大小

Xmn:年轻代堆大小

Xss:每个线程的堆大小

PermSize:初始持久代大小

MaxPermSize:最大持久代大小

一般Xms、Xmx设置相同,PermSize、MaxPermSize设置相同,这样可以避免伸缩堆大小带来的性能损耗。

首先eclipse安装根目录下打开eclipse.ini,加上配置:

-Xloggc:gc.log

-XX:+PrintGCTimeStamps

-XX:+PrintGCDetails

加上述配置的目的是运行eclipse的时候可以打出详细gc过程。

启动eclipse,然后打开gc.log一看,哇塞启动一次就做了几十次GC,包括不少次Full GC,着手优化……

先解决Full GC的问题:

'''
3.159: [Full GC 3.159: [Tenured: 22716K->26133K(35780K), 0.1116536 secs] 38493K->26133K(51908K), [Perm : 20479K->20479K(20480K)], 0.1117614 secs] [Times: user=0.11 sys=0.00, real=0.11 secs]
3.706: [Full GC 3.706: [Tenured: 26133K->27935K(43556K), 0.1235449 secs] 40042K->27935K(63204K), [Perm : 24575K->24575K(24576K)], 0.1236474 secs] [Times: user=0.13 sys=0.00, real=0.13 secs]
'''

如上GC日志可以看出,Full GC主要是针对Tenured、Perm区的GC,好那先调整Perm大小,指定充裕的持久代区域,eclipse.ini中加入:

-XX:PermSize=128m
-XX:MaxPermSize=128m

再次启动看gc.log,Full GC没有了,但是还有很多次普通GC,说明还是需要进一步优化。

eclipse的初始堆大小分配得很小,因此不利于年轻代堆大小的分配,如果设置的年轻代堆大小Xmn大于最小堆大小Xms,eclipse将无法启动。


因此,将Xms调整为512m,重启动后观察GC大幅减少。


最后调整Xmn,年轻代堆大小,经过反复比较后,发现设置“-Xmn256m”效果最优。


优化后的GC日志:

'''
3.203: [GC 3.204: [DefNew: 209776K->26176K(235968K), 0.0876304 secs] 209776K->27184K(498112K), 0.0876921 secs] [Times: user=0.09 sys=0.00, real=0.09 secs]
5.422: [GC 5.422: [DefNew: 235968K->12433K(235968K), 0.0989335 secs] 236976K->39296K(498112K), 0.0990229 secs]
'''
在接近6秒的启动时间内,eclipse总共只做了2次普通GC回收,怎么样效果明显吧!
一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡,其实只要对eclipse的相关参数进行一些配置,就会有很大的改善。

减少jvm内存回收引起的eclipse卡的问题

这个主要是jvm在client模式,进行内存回收时,会停下所有的其它工作,带回收完毕才去执行其它任务,在这期间eclipse就卡住了。所以适当的增加jvm申请的内存大小来减少其回收的次数甚至不回收,就会是卡的现象有明显改善。

主要通过以下的几个jvm参数来设置堆内存的:

-Xmx512m : 最大总堆内存,一般设置为物理内存的1/4

-Xms512m : 初始总堆内存,一般将它设置的和最大堆内存一样大,这样就不需要根据当前堆使用情况而调整堆的大小了

-Xmn192m : 年轻带堆内存,sun官方推荐为整个堆的3/8

堆内存的组成 : 总堆内存 = 年轻带堆内存 + 年老带堆内存 + 持久带堆内存

年轻带堆内存 : 对象刚创建出来时放在这里

年老带堆内存 : 对象在被真正会回收之前会先放在这里

持久带堆内存 : class文件,元数据等放在这里

-XX:PermSize=128m : 持久带堆的初始大小

-XX:MaxPermSize=128m : 持久带堆的最大大小,eclipse默认为256m。如果要编译jdk这种,一定要把这个设的很大,因为它的类太多了。

还有其它的相关参数可以看看下面的参考材料,很有启发的:

-XX:+UseParallelGC 使用并发内存回收

-XX:+DisableExplicitGC 禁用System.gc()的显示内存回收

9.加快启动速度

在eclipse启动的时候,它总是会搜索让其运行的jre,往往就是这个搜索过程让eclipse启动变慢了。(没设置时,等2-3s出现进度条,设置后直接出现进度条)

只要在eclipse.ini中加入-vm的参数就可以了

2.png

10.关闭自动更新

3.png

11.workspace有问题

eclipse在启动时候会读取workspace里面的.metadata目录的内容;
web server在启动和运行的时候也会读取.metadata目录里面的一些文件吧(缓存之类的文件);
.metadata目录里面一定有什么错误的文件或者lock的文件,导致整个eclipse方方面面都非常慢了。
.metadata目录里面的文件超级多,搞不清具体是哪个目录。索性就整个删除,当eclipse重新打开之后,会再次建立.metadata目录及其里面的文件。但是所有的关于eclipse的配置都会消失。
参考:http://www.cnblogs.com/xd502djj/archive/2011/03/25/1995202.html

追溯原因:

会造成.metadata目录里面有错误的原因,我猜测有几下集中可能:

web server正在运行,eclipse强行关闭:server is running,没有shut down server 就直接关闭eclipse。

或者web server没有运行,但是eclipse的系统进程被强行终止了。

在或者eclipse运行时,突然pc断电了。。。也有可能(平时下班都不关机,单位晚上会时不时的晚上断电的)。

一般来说,在eclipse正常关闭时候会往.metadata目录写入点配置。如下图的eclipse配置:

7.jpeg

eclipse会安装装一些plugins,但是eclipse正常关闭的时候估计会写入一些相关plugins的配置到..metadata.plugins\里面

上一篇下一篇

猜你喜欢

热点阅读