[J2SE 5.0专题][3]虚拟机

作者:网络 来源:佚名 更新时间:2008-05-22 10:40:30 点击:
随着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()方法,但是具体的精度是平台相关的。


基本上就是这样,除了第一个类数据共享之外,我没有发现太吸引我的东西。