随着J2SE 5.0的发布,JavaTM HotSpot虚拟机也随之更新。新的变化包括:类数据共享、垃圾收集、服务器级机器侦测、线程优先级变化、致命错误处理、高精度计时支持等。
接下来我们大家一起来一个一个的看。
[类数据共享]
可能在以往的Java版本中,大家会对Java应用程序的启动速度颇有微词,于是SUN在发布新的JRE时在这方面作了改善。这就是类数据共享。
简单的讲,类数据共享就是在JRE安装时自动,或者安装后任意时间手动,将核心的Java类打包并转换成虚拟机识别的格式,在虚拟机下次启动的时候,就会把这一段数据直接映射到内存中,而不需要走装载的过程,并且因为这一段数据是静态的,所以可以被所有虚拟机进程共享。所以,使用类数据共享后,Java程序启动会相应更快。
根据SUN提供的文档,类数据共享不支持Windows 95/98/ME,也只能被用于Client VM(客户型虚拟机),且必须使用串行的垃圾收集器。文档中还特别提到:在Windows环境,会显示Java程序占用的内存增加,其实是映射的原因,总的内存使用其实减少了。
下面是一些相关的命令行:
java -Xshare:dump 手动生成类数据共享
java -Xshare:off 关闭共享
java -Xshare:on 打开共享
java -Xshare:auto 自动确定共享(默认)
更详细信息,参考这里。
[垃圾收集器]
J2SE 5.0对服务器级机器上运行的虚拟机的垃圾收集性能作了优化调整,大致包括默认使用并行GC、新的默认堆最大值和最小值、新的time-limit和space-limit参数等等。
这些变化大致只针对配置很好的机器,没时间仔细研究了,详细信息参考这里。
[服务器级机器侦测]
这个机制用来在启动Java程序时,自动判断所在的机器是否具有服务器机器的特质,并自动选择使用合适的虚拟机版本。需要说明的是,在J2SE 5.0的发布中,包含了两个版本的虚拟机,一个Client VM,一个Server VM,分别针对不同的情形使用。
判断一台机器是否是服务器级,有一个标准,那就是是否具备两个或两个以上的CPU,以及是否同时具备2G以上的内存。可惜的是,在所有32位的Windows机器上,默认的都是只有Client VM而已,而在AMD64位的Windows机器上,同样只有一个选择,那就是Server VM。所以基本上可以断定,Windows平台没有这个侦测功能。
有关服务器级机器侦测更详细的信息,参考这里。
[线程优先级变化]
如果我没有理解错,这些变化仅仅体现在SUN的Solaris操作系统上。有兴趣的朋友看看这里。
[致命错误处理]
J2SE 5.0中的致命错误报告机制作了增强:改进的调试信息输出和可靠性。
[高精度计时支持]
J2SE 5.0中引入了新的System.nanoTime()方法,但是具体的精度是平台相关的。
基本上就是这样,除了第一个类数据共享之外,我没有发现太吸引我的东西。