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

j2se

随着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()方法,但是具体的精度是平台相关的。

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

时间: 2024-09-26 19:12:40

[J2SE 5.0专题][3]虚拟机的相关文章

J2SE 5.0专题 之 语言特性

j2se J2SE 5.0专题 之 语言特性                         本文作者: 高宇翔(大胃) 1.1.        背景J2SE(TM) 5.0正式发布至今已超过3个月的时间了,就在前不久,大概是在两周之前,Sun又发布了更新过的JDK 5.0 Update 1,改掉了一些第一个版本中出现的bug. 由于Java社群等待这一从1.4向5.0版本升级已经有相当长的一段时间,大家都很关心5.0中有哪些值得关注的变化,于是blog的相关信息满天飞,我也兴冲冲地在自己的bl

[J2SE 5.0专题][2.5]可变长度参数

j2se 顾名思义,可变长度参数就是指在方法的参数体中,只要定义恰当,我们可以使用任意数量的参数,类似于使用对象数组.在J2SE 5.0中,一个新的语法被引入,就是在参数类型名称后面加上 ... ,表示该方法可以接受多个该类型的参数.需要说明的是可变长度参数必须放在参数列表的最后,且一个方法只能包含一个这样的参数. 需要注意的是,这个语法只是在声明一个方法的时候管用,真正当我们具体实现这个方法时,我们通常都不这么写,因为这样写的话在方法体内该参数仅仅被当作一个Object,并不能通过这个Obje

[J2SE 5.0专题][2.7]注解

j2se 注解(Annotations)在我看来是J2SE 5.0中比较重大的新特性.将来的EJB 3.0规范将会全面利用该特性来简化Session Bean. Message-Driven Bean和EntityBean的定义和实现. Java的注解或多或少也是受了.NET的影响.这不是说Java本来没有注解,以前的诸如JavaDoc的标注,尤其@deprecated,都是注解,只不过这一次的更新将注解推到了Java历史上前所未有的高度.通过注解,我们可以实现原先相对复杂的高级功能. 先看一个

[J2SE 5.0专题][2.1]泛型

j2se 大凡用过C/C++的朋友对"泛型"这个词都不会陌生吧?我相信有过一些Java编码经验的朋友或多或少也遇到过使用集合类的方法时必须要手工做类型转换的情况.看下面的例子: import java.util.ArrayList;import java.util.Iterator; public class MyGenerics { public static void main(String[] args) { useNonGenerics(); useGenerics(); }

J2SE 5.0实例---枚举

j2se 枚举在过去,我们必须用整型常数代替枚举,随着J2SE 5.0的发布,这样的方法终于一去不复返了. 一个简单的枚举类型定义如下: public enum Weather {      SUNNY,RAINY,CLOUDY } 枚举可以用在switch语句中: Weather weather=Weather.CLOUDY;      switch(weather)      {      case SUNNY:             System.out.println("It's su

在Eclipse 3.1中体验J2SE 5.0的新特性: 第三部分 :范型

J2SE 5.0 (Tiger)的发布是Java语言发展史上的一个重要的里程碑, 是迄今为止在 Java 编程方面所取得的最大进步. J2SE 5.0提供了很多令人激动的特性.这些特性包括范型(generics)的支持, 枚举类 型(enumeration)的支持, 元数据(metadata)的支持, 自动拆箱(unboxing)/装箱 (autoboxing), 可变个数参数(varargs), 静态导入(static imports), 以及新的线程架 构(Thread framework)

在Eclipse 3.1中体验J2SE 5.0的新特性 第二部分 :注释类型

J2SE 5.0 (Tiger)的发布是Java语言发展史上的一个重要的里程碑, 是迄今为止在 Java 编程方面所取得的最大进步. J2SE 5.0提供了很多令人激动的特性.这些特性包括范型(generics)的支持, 枚举类 型(enumeration)的支持, 元数据(metadata)的支持, 自动拆箱(unboxing)/装箱 (autoboxing), 可变个数参数(varargs), 静态导入(static imports), 以及新的线程架 构(Thread framework)

在Eclipse 3.1中体验J2SE 5.0的新特性: 第一部分 :枚举类型

J2SE 5.0 (Tiger)的发布是Java语言发展史上的一个重要的里程碑, 是迄今为止在 Java 编程方面所取得的最大进步. J2SE 5.0提供了很多令人激动的特性.这些特性包括范型(generics)的支持, 枚举类型 (enumeration)的支持, 元数据(metadata)的支持, 自动拆箱(unboxing)/装箱 (autoboxing), 可变个数参数(varargs), 静态导入(static imports), 以及新的线程架 构(Thread framework)

用J2SE 5.0创建定制的泛型集合

J2SE 5.0引入了许多新型的集合API-你需要了解它们以便能够正确地实现泛型定制的集合-它可以无缝地与多种类型和新型的"for each"结构一起工作.本文将向你展示示怎样创建与J2SE最新特征相兼容的集合. 一.创建支持泛型的类 首先,你必须学习如何创建一个允许存在"泛型类型"的类.这意味着无论何时实例化你的类,你都能够指定一个或多个Java类型与该类相关联.为了说明这个问题,请考虑列表1中的一个简单示例类. 注意,列表1中的类是如何声明的.它在尖括号之间指定