先前只在几个测试用的环境里装了JDK 6 update 25,没在自己的开发机上装。刚才正好试一个东西的时候装上了,就顺手把跑Eclipse的JVM设到了JDK6u25上。
-vmD:/sdk/jdk1.6.0_25/bin/javaw.exe-startupplugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar--launcher.libraryplugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519-productorg.eclipse.epp.package.jee.product--launcher.XXMaxPermSize256M-showsplashorg.eclipse.platform--launcher.XXMaxPermSize256m-vmargs-server-Dosgi.requiredJavaVersion=1.5-Xms40m-Xmx512m-javaagent:lombok.jar-Xbootclasspath/a:lombok.jar-XX:+TieredCompilation
留意几个参数:
-vm
这个用来指定用哪个JDK来启动Eclipse。指定到我的JDK6u25安装目录了。
-vmargs
这个后面的配置用来传给JVM设定启动参数。其中
-javaagent:lombok.jar-Xbootclasspath/a:lombok.jar
这俩是因为我装了Project Lombok插件。对它没兴趣的可以忽略这两项。
重要的是这两个配置:
-server-XX:+TieredCompilation
前者是指定使用HotSpot Server VM。后者则是打开“多层编译”(tiered compilation)。在该模式下,代码会先被解释器执行,积累到足够热度的时候由client compiler(C1)编译,然后继续积累热度到一定程度会进一步被server compiler(C2)重新以更高的优化程度编译。
这个模式在JDK6的HotSpot里很早就存在了,但去年下半年有大幅度翻新,相关代码随着JDK6u25发布,现在已经比较稳定了。相关的changeset在这里。
在JDK 8 build 23里,x86与SPARC上的HotSpot Server VM已经将多层编译模式设为默认执行模式。相关changeset:
7116795: Tiered: enable by default for server: http://hg.openjdk.java.net/hsx/hotspot-main/hotspot/rev/97825a4f7369
理论上这会提高启动速度和平均速度,顶峰速度也可能有一定提高——跟client VM比的话是肯定有提高,跟server VM比的话是应该还是差不多。
现实是:我用了这个模式之后Eclipse的启动感觉是变快了……不知道是不是我的错觉?
K神说他试了觉得启动速度没差别。嗯这应该怎么测比较好?
大家也试试看如何?
================================================
2011-12-01更新:在这个改动生效后,HotSpot Server VM就默认开启多层编译了:
http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2011-November/006786.html
changeset: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/97825a4f7369
2012-04-07更新:结果在JDK7u4里多层编译又被设回到默认不打开了:
7159766: Tiered compilation causes performance regressions
1 楼 docman 2011-05-04
不知道有没有官方的数据,不过这对测试集应该是很敏感的,如果非要对特定应用测,可以:
1.比如对Eclipse,统计对比在C1/C2/Tiered模式下Eclipse启动到初始化完进入稳定态后的时间
2.HOTSPOT的解释翻译一般具有明显的阶段性,可以选择合适的阈值,统计C1/C2/Tiered模式在第一阶段所耗费的时间,这个麻烦些不过具有一定的普适性
3.呵呵,发动群众,直观感觉,大量采样
1.比如对Eclipse,统计对比在C1/C2/Tiered模式下Eclipse启动到初始化完进入稳定态后的时间
2.HOTSPOT的解释翻译一般具有明显的阶段性,可以选择合适的阈值,统计C1/C2/Tiered模式在第一阶段所耗费的时间,这个麻烦些不过具有一定的普适性
3.呵呵,发动群众,直观感觉,大量采样
2 楼 RednaxelaFX 2011-05-04
docman 写道
不知道有没有官方的数据,不过这对测试集应该是很敏感的,如果非要对特定应用测,可以:
1.比如对Eclipse,统计对比在C1/C2/Tiered模式下Eclipse启动到初始化完进入稳定态后的时间
2.HOTSPOT的解释翻译一般具有明显的阶段性,可以选择合适的阈值,统计C1/C2/Tiered模式在第一阶段所耗费的时间,这个麻烦些不过具有一定的普适性
3.呵呵,发动群众,直观感觉,大量采样
1.比如对Eclipse,统计对比在C1/C2/Tiered模式下Eclipse启动到初始化完进入稳定态后的时间
2.HOTSPOT的解释翻译一般具有明显的阶段性,可以选择合适的阈值,统计C1/C2/Tiered模式在第一阶段所耗费的时间,这个麻烦些不过具有一定的普适性
3.呵呵,发动群众,直观感觉,大量采样
本来发这帖就是为了执行3
3 楼 ykdsg 2011-06-10
Project Lombok如果要用的话估计还要推广开,至少要在项目组里推广开,不然代码提交上去了,别人没法用。下了JDK update26 测试了下多层编译,好像eclipse第一次打开不快,接下来就很快了,不过cpu占用很高一度达到90%多,开完之后就下去了