论坛首页 Java企业应用论坛

遇到个奇怪的现象:jdk1.6的类加载比1.5慢一倍

浏览 12908 次
精华帖 (0) :: 良好帖 (6) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-11-27  
我测的是jdk1.6_update21,下面是拿eclipse启动作为测试的例子,使用的是同一个eclipse,2次测试就在eclipse.ini改了jvm路径,其他不变。已经反复启动过多次确保避免操作系统磁盘缓存的因素。

测1.6时已经把-XX:-UseSplitVerifier关闭掉1.6的新类型推断(不过这个开着关着没啥影响,eclipse又不是用1.6编的),根据-XX:+TraceClassLoading的输出,使用两个jdk加载的类是一致的,两个jdk测试的时候类共享都是auto的(默认值:-Xshare:auto),从TraceClassLoading的输出也能看出类共享是起作用的。解释不了为何两者有100%左右的性能差距?我机器上测试多次都是如此,不知道是我的机器还是普遍现象。是统计口径两者不一至,还是性能确实有差距?

C:\Users\Thinkpad>jps
3552
6372 org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
6900 Jps

C:\Users\Thinkpad>jstat -class 6372
Loaded  Bytes  Unloaded  Bytes     Time
  7917 10190.3        0     0.0       8.18

C:\Users\Thinkpad>jps
3552
7272 Jps
7216 org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar

C:\Users\Thinkpad>jstat -class 7216
Loaded  Bytes  Unloaded  Bytes     Time
  7902  9691.2        3     2.6       4.34
   发表时间:2010-11-27  
这个21似乎真的有问题。
我的办公用的电脑上装了1.5_11,1.6_18,1.6_21
我们有个产品运行在1.5_11和1.6_18上都没有问题,而且还可以互相通信。但1.6_21就不行,甚至同是21的服务器端和客户端连接都有问题。
0 请登录后投票
   发表时间:2010-11-29   最后修改:2010-11-29
首先赞搂主的精神。确实存在此问题,如下:
jdk1.6.0_21/bin/java
$ jps
5829 org.eclipse.equinox.launcher_1.1.0.v20100507.jar
5906 Jps
$ jstat -class 5829
Loaded  Bytes  Unloaded  Bytes     Time   
  6604  8544.5        0     0.0      10.71

jdk1.5.0_22/bin/java
$ jps
5640 Jps
5577 org.eclipse.equinox.launcher_1.1.0.v20100507.jar
$ jstat -class 5577
Loaded  Bytes  Unloaded  Bytes     Time   
  6617  8325.7        0     0.0       3.78

0 请登录后投票
   发表时间:2010-11-29  
之前不是说21与Eclipse有兼容性问题,是被甲骨文收购后改名字造成的
0 请登录后投票
   发表时间:2010-11-29  
vvvpig 写道
之前不是说21与Eclipse有兼容性问题,是被甲骨文收购后改名字造成的

对,我也有这个印象.
0 请登录后投票
   发表时间:2010-11-29   最后修改:2010-11-29
名字改成oracle的那个问题是eclipse.exe的isSunVM()判断错误,-XX:MaxPermSize没传过去给虚拟机,导致eclipse只有64M的永久代可用经常发生OOM的,和这个没有关系。

jdk1.6比1.5慢的,应该和字节码或者jar包验证存在联系,使用-Xverify:none把字节码验证关闭掉,两边的性能就基本一致,1.6还是稍慢一些,但差距比较小了。

待会找个openJDK的源码跟一下,搞清楚这个问题。
0 请登录后投票
   发表时间:2010-11-29  
我用的也是21..
0 请登录后投票
   发表时间:2010-11-29  
LZ真是个细心的人,赞一个,,,

我用的是
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode, sharing)
0 请登录后投票
   发表时间:2010-11-29   最后修改:2010-11-29
hmm...
拿我机器上装的JDK来试了下用Eclipse 3.5打开空的workspace。

Windows XP SP3, x86
org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
都是用client模式启动的。

1.5.0

D:\experiment>jstat -class 1780
Loaded  Bytes  Unloaded  Bytes     Time
  6357  7705.5        0     0.0       4.80

D:\experiment>jstat -class 1976
Loaded  Bytes  Unloaded  Bytes     Time
  6357  7705.5        0     0.0       4.78

D:\experiment>jstat -class 2628
Loaded  Bytes  Unloaded  Bytes     Time
  6356  7705.0        0     0.0       4.77


1.5.0_22

D:\experiment>jstat -class 3544
Loaded  Bytes  Unloaded  Bytes     Time
  6273  7789.5        0     0.0       6.20

D:\experiment>jstat -class 596
Loaded  Bytes  Unloaded  Bytes     Time
  6274  7790.1        0     0.0       6.24

D:\experiment>jstat -class 3900
Loaded  Bytes  Unloaded  Bytes     Time
  6270  7787.7        0     0.0       6.41


1.6.0

D:\experiment>jstat -class 2168
Loaded  Bytes  Unloaded  Bytes     Time
  6326  7889.2        0     0.0       2.82

D:\experiment>jstat -class 648
Loaded  Bytes  Unloaded  Bytes     Time
  6325  7888.6        0     0.0       2.69

D:\experiment>jstat -class 3892
Loaded  Bytes  Unloaded  Bytes     Time
  6327  7889.9        0     0.0       2.77


1.6.0_01

D:\experiment>jstat -class 2840
Loaded  Bytes  Unloaded  Bytes     Time
  6323  7887.6        0     0.0       2.75

D:\experiment>jstat -class 3988
Loaded  Bytes  Unloaded  Bytes     Time
  6324  7888.2        0     0.0       2.74

D:\experiment>jstat -class 2540
Loaded  Bytes  Unloaded  Bytes     Time
  6324  7888.2        0     0.0       2.72


1.6.0_04

D:\experiment>jstat -class 2840
Loaded  Bytes  Unloaded  Bytes     Time
  6329  7932.6        0     0.0       2.60

D:\experiment>jstat -class 2668
Loaded  Bytes  Unloaded  Bytes     Time
  6329  7932.4        0     0.0       2.63

D:\experiment>jstat -class 2024
Loaded  Bytes  Unloaded  Bytes     Time
  6324  7929.1        0     0.0       2.61


1.6.0_05

D:\experiment>jstat -class 2860
Loaded  Bytes  Unloaded  Bytes     Time
  6322  7928.0        0     0.0       2.57

D:\experiment>jstat -class 2636
Loaded  Bytes  Unloaded  Bytes     Time
  6327  7931.1        0     0.0       2.51

D:\experiment>jstat -class 3428
Loaded  Bytes  Unloaded  Bytes     Time
  6327  7931.9        0     0.0       2.47


1.6.0_10

D:\experiment>jstat -class 288
Loaded  Bytes  Unloaded  Bytes     Time
  6326  7937.4        0     0.0       2.60
1476 Jps

D:\experiment>jstat -class 1440
Loaded  Bytes  Unloaded  Bytes     Time
  6331  7940.7        0     0.0       2.60
2136 Jps

D:\experiment>jstat -class 332
Loaded  Bytes  Unloaded  Bytes     Time
  6328  7938.7        0     0.0       2.61


1.6.0_13

D:\experiment>jstat -class 680
Loaded  Bytes  Unloaded  Bytes     Time
  6329  7940.3        0     0.0       2.71

D:\experiment>jstat -class 3264
Loaded  Bytes  Unloaded  Bytes     Time
  6334  7943.6        0     0.0       2.68

D:\experiment>jstat -class 2668
Loaded  Bytes  Unloaded  Bytes     Time
  6332  7942.3        0     0.0       2.71


1.6.0_15

D:\experiment>jstat -class 1604
Loaded  Bytes  Unloaded  Bytes     Time
  6285  7979.6        0     0.0       2.77

D:\experiment>jstat -class 1088
Loaded  Bytes  Unloaded  Bytes     Time
  6282  7977.6        0     0.0       2.66

D:\experiment>jstat -class 1116
Loaded  Bytes  Unloaded  Bytes     Time
  6282  7977.6        0     0.0       2.65


1.6.0_17

D:\experiment>jstat -class 2004
Loaded  Bytes  Unloaded  Bytes     Time
  6283  7978.3        0     0.0       2.77

D:\experiment>jstat -class 3264
Loaded  Bytes  Unloaded  Bytes     Time
  6287  7981.0        0     0.0       2.80

D:\experiment>jstat -class 3164
Loaded  Bytes  Unloaded  Bytes     Time
  6285  7976.5        0     0.0       2.74


1.6.0_18

D:\experiment>jstat -class 3252
Loaded  Bytes  Unloaded  Bytes     Time
  6285  8016.4        0     0.0       4.04

D:\experiment>jstat -class 2140
Loaded  Bytes  Unloaded  Bytes     Time
  6288  8018.5        0     0.0       4.06

D:\experiment>jstat -class 1312
Loaded  Bytes  Unloaded  Bytes     Time
  6287  8017.7        0     0.0       4.08


1.6.0_19

D:\experiment>jstat -class 3164
Loaded  Bytes  Unloaded  Bytes     Time
  6289  8020.7        0     0.0       3.86

D:\experiment>jstat -class 1908
Loaded  Bytes  Unloaded  Bytes     Time
  6285  8017.9        0     0.0       3.94

D:\experiment>jstat -class 2360
Loaded  Bytes  Unloaded  Bytes     Time
  6295  8025.7        0     0.0       3.91


1.6.0_20

D:\experiment>jstat -class 3404
Loaded  Bytes  Unloaded  Bytes     Time
  6290  8021.7        0     0.0       3.94

D:\experiment>jstat -class 3432
Loaded  Bytes  Unloaded  Bytes     Time
  6297  8027.0        0     0.0       3.92

D:\experiment>jstat -class 4080
Loaded  Bytes  Unloaded  Bytes     Time
  6289  8020.9        0     0.0       3.94


1.6.0_21

D:\experiment>jstat -class 2456
Loaded  Bytes  Unloaded  Bytes     Time
  6293  8024.6        0     0.0       4.00

D:\experiment>jstat -class 3444
Loaded  Bytes  Unloaded  Bytes     Time
  6310  8040.4        0     0.0       3.92

D:\experiment>jstat -class 2024
Loaded  Bytes  Unloaded  Bytes     Time
  6306  8037.7        0     0.0       4.00


JDK 6推出的split verifier本来就是用来降低校验成本,提高类加载速度的。不过split verifier只对版本号为50.0或以上的Class文件才有效,而我的Eclipse 3.5里的JAR包基本上都没版本50.0的Class文件,实际用的还是老的type inference verification算法。
0 请登录后投票
   发表时间:2010-11-29  
RednaxelaFX 写道
hmm...
拿我机器上装的JDK来试了下用Eclipse 3.5打开空的workspace。

Windows XP SP3, x86
org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
都是用client模式启动的。

1.5.0

D:\experiment>jstat -class 1780
Loaded  Bytes  Unloaded  Bytes     Time
  6357  7705.5        0     0.0       4.80

D:\experiment>jstat -class 1976
Loaded  Bytes  Unloaded  Bytes     Time
  6357  7705.5        0     0.0       4.78

D:\experiment>jstat -class 2628
Loaded  Bytes  Unloaded  Bytes     Time
  6356  7705.0        0     0.0       4.77


1.5.0_22

D:\experiment>jstat -class 3544
Loaded  Bytes  Unloaded  Bytes     Time
  6273  7789.5        0     0.0       6.20

D:\experiment>jstat -class 596
Loaded  Bytes  Unloaded  Bytes     Time
  6274  7790.1        0     0.0       6.24

D:\experiment>jstat -class 3900
Loaded  Bytes  Unloaded  Bytes     Time
  6270  7787.7        0     0.0       6.41


1.6.0

D:\experiment>jstat -class 2168
Loaded  Bytes  Unloaded  Bytes     Time
  6326  7889.2        0     0.0       2.82

D:\experiment>jstat -class 648
Loaded  Bytes  Unloaded  Bytes     Time
  6325  7888.6        0     0.0       2.69

D:\experiment>jstat -class 3892
Loaded  Bytes  Unloaded  Bytes     Time
  6327  7889.9        0     0.0       2.77


1.6.0_01

D:\experiment>jstat -class 2840
Loaded  Bytes  Unloaded  Bytes     Time
  6323  7887.6        0     0.0       2.75

D:\experiment>jstat -class 3988
Loaded  Bytes  Unloaded  Bytes     Time
  6324  7888.2        0     0.0       2.74

D:\experiment>jstat -class 2540
Loaded  Bytes  Unloaded  Bytes     Time
  6324  7888.2        0     0.0       2.72


1.6.0_04

D:\experiment>jstat -class 2840
Loaded  Bytes  Unloaded  Bytes     Time
  6329  7932.6        0     0.0       2.60

D:\experiment>jstat -class 2668
Loaded  Bytes  Unloaded  Bytes     Time
  6329  7932.4        0     0.0       2.63

D:\experiment>jstat -class 2024
Loaded  Bytes  Unloaded  Bytes     Time
  6324  7929.1        0     0.0       2.61


1.6.0_05

D:\experiment>jstat -class 2860
Loaded  Bytes  Unloaded  Bytes     Time
  6322  7928.0        0     0.0       2.57

D:\experiment>jstat -class 2636
Loaded  Bytes  Unloaded  Bytes     Time
  6327  7931.1        0     0.0       2.51

D:\experiment>jstat -class 3428
Loaded  Bytes  Unloaded  Bytes     Time
  6327  7931.9        0     0.0       2.47


1.6.0_10

D:\experiment>jstat -class 288
Loaded  Bytes  Unloaded  Bytes     Time
  6326  7937.4        0     0.0       2.60
1476 Jps

D:\experiment>jstat -class 1440
Loaded  Bytes  Unloaded  Bytes     Time
  6331  7940.7        0     0.0       2.60
2136 Jps

D:\experiment>jstat -class 332
Loaded  Bytes  Unloaded  Bytes     Time
  6328  7938.7        0     0.0       2.61


1.6.0_13

D:\experiment>jstat -class 680
Loaded  Bytes  Unloaded  Bytes     Time
  6329  7940.3        0     0.0       2.71

D:\experiment>jstat -class 3264
Loaded  Bytes  Unloaded  Bytes     Time
  6334  7943.6        0     0.0       2.68

D:\experiment>jstat -class 2668
Loaded  Bytes  Unloaded  Bytes     Time
  6332  7942.3        0     0.0       2.71


1.6.0_15

D:\experiment>jstat -class 1604
Loaded  Bytes  Unloaded  Bytes     Time
  6285  7979.6        0     0.0       2.77

D:\experiment>jstat -class 1088
Loaded  Bytes  Unloaded  Bytes     Time
  6282  7977.6        0     0.0       2.66

D:\experiment>jstat -class 1116
Loaded  Bytes  Unloaded  Bytes     Time
  6282  7977.6        0     0.0       2.65


1.6.0_17

D:\experiment>jstat -class 2004
Loaded  Bytes  Unloaded  Bytes     Time
  6283  7978.3        0     0.0       2.77

D:\experiment>jstat -class 3264
Loaded  Bytes  Unloaded  Bytes     Time
  6287  7981.0        0     0.0       2.80

D:\experiment>jstat -class 3164
Loaded  Bytes  Unloaded  Bytes     Time
  6285  7976.5        0     0.0       2.74


1.6.0_18

D:\experiment>jstat -class 3252
Loaded  Bytes  Unloaded  Bytes     Time
  6285  8016.4        0     0.0       4.04

D:\experiment>jstat -class 2140
Loaded  Bytes  Unloaded  Bytes     Time
  6288  8018.5        0     0.0       4.06

D:\experiment>jstat -class 1312
Loaded  Bytes  Unloaded  Bytes     Time
  6287  8017.7        0     0.0       4.08


1.6.0_19

D:\experiment>jstat -class 3164
Loaded  Bytes  Unloaded  Bytes     Time
  6289  8020.7        0     0.0       3.86

D:\experiment>jstat -class 1908
Loaded  Bytes  Unloaded  Bytes     Time
  6285  8017.9        0     0.0       3.94

D:\experiment>jstat -class 2360
Loaded  Bytes  Unloaded  Bytes     Time
  6295  8025.7        0     0.0       3.91


1.6.0_20

D:\experiment>jstat -class 3404
Loaded  Bytes  Unloaded  Bytes     Time
  6290  8021.7        0     0.0       3.94

D:\experiment>jstat -class 3432
Loaded  Bytes  Unloaded  Bytes     Time
  6297  8027.0        0     0.0       3.92

D:\experiment>jstat -class 4080
Loaded  Bytes  Unloaded  Bytes     Time
  6289  8020.9        0     0.0       3.94


1.6.0_21

D:\experiment>jstat -class 2456
Loaded  Bytes  Unloaded  Bytes     Time
  6293  8024.6        0     0.0       4.00

D:\experiment>jstat -class 3444
Loaded  Bytes  Unloaded  Bytes     Time
  6310  8040.4        0     0.0       3.92

D:\experiment>jstat -class 2024
Loaded  Bytes  Unloaded  Bytes     Time
  6306  8037.7        0     0.0       4.00


JDK 6推出的split verifier本来就是用来降低校验成本,提高类加载速度的。不过split verifier只对版本号为50.0或以上的Class文件才有效,而我的Eclipse 3.5里的JAR包基本上都没版本50.0的Class文件,实际用的还是老的type inference verification算法。


哈哈,我是你得粉
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics