假死可能有两个原因:
一、 GC 引发的 STW
二、 Eclipse 4.x 的自身的性能问题, Eclipse 4.2 发布后报漏出来很大的性能问题,这个也是官方承认的,见下面
https://www.infoq.com/news/2012/09/eclipse-juno-performance 官方的说法是没钱没资源所以发布前没做性能测试,虽然 Google 随后赞助了一些资金,但是性能问题在 4.x 中一直
存在,根本没有得到彻底性解决,为此 Eclipse 还新增了一个“ UI Responsiveness Monitoring"功能,然没有卵用,个
人猜测是 E4 的架构问题导致,总之 E4 就是一个又丑又慢又垃圾的作死产物,很多人都认为 Eclipse 自己把自己玩死了,
.............扯远了,见谅,,总之如果你要用 Eclipse 4.x ,一定要用最新版,目前应该是 4.6.2 。
解决办法:
针对第一个原因,调整你的 JVM 参数,说实话你的 GC 参数够烂,以减少 GC 次数和降低 STW 的停顿时间为目标,并不是 Heap 越大越好,你搞 4G 的 Heap ,一次 Full GC 停顿好几秒甚至十几秒,不卡死你卡谁啊,另外 GC 新生代并行收集器,旧生代 CMS ,打开你的 GC Log,不看 GC 日志的调优都是刷流氓。初始值和最大值设置成一样的,新生代整个 Heap 的 3/8,自己算,启动 STS 重新编译一次项目,根据你的 GC Log 内容调整你整个 Heap 大小和新生代大小, 3/8 只是官方建议值,没啥实际意义,肯定要根据自己的情况做调整的。永久代可以 384m,512m 这些,初始和最大也搞成一样的,你搞 1G 明显是浪费,你有那么多 class 吗,
针对第二个原因,升级你的 STS 到最新版,每个项目都要关掉 Validation,去除 JavaScript Facets ,话说 Eclipse 做的 JSDT 插件是我见过最烂的 js 插件,还不如不做呢,基本上 Eclipse 假死都是 JSDT 这货搞的。
http://movingfulcrum.com/the-fall-of-eclipse/ , Eclipse 基本已经完蛋了,又没钱又没开发资源,死抱着它的”大平台“概念,不好好做 IDE ,光宣传它的平台有卵用啊,古时候同样功能的插件你总是能找到好几个不同的,现在都死的不能在死了,连个好的 Freemarker 编辑器插件你现在都找不到, 4.6.x 才加了一个 JSON 编辑器,但是连个 JSON 格式化都没做好,根本就是一个半成品......总之就是如果条件允许赶紧换 IDEA,甚至 Netbeans 都比 Eclipse 强。
附上我的 eclipse.init 供参考,同时编译几个大的项目也从来没有卡死过:
-startup
../Eclipse/plugins/org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar
--launcher.library
../Eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.401.v20161122-1740
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.8
-Xms1024m
-Xmn384m
-Xmx1024m
-XX:MetaspaceSize=256M
-XX:MaxMetaspaceSize=384M
-XX:+DisableExplicitGC
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-verbose:gc
-Xloggc:gc.log
-Duser.language=en
-Xdock:icon=../Resources/Eclipse.icns
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts