WEB开发网
开发学院软件开发Java 驯服 Tiger: 虚拟机更新 阅读

驯服 Tiger: 虚拟机更新

 2009-11-04 00:00:00 来源:WEB开发网   
核心提示: 如果不喜欢拥有共享的文件,可以不用它,驯服 Tiger: 虚拟机更新(3),可以用 -Xshare:off 选项禁止共享,然后,虚拟机的配置有了新的、不同的选项,承诺会有更快的启动、更小的内存开销,会从 rt.jar 文件装入所有的原始类信息, 为确保允许使用共享数据文件

如果不喜欢拥有共享的文件,可以不用它。可以用 -Xshare:off 选项禁止共享。然后,会从 rt.jar 文件装入所有的原始类信息。

为确保允许使用共享数据文件,请使用 -Xshare:on 选项。默认情况下并没有打开它的使用。相反,-Xshare:auto 选项是默认值。auto 选项意味着如果可能的话,应当用共享文件。如果文件不可用(例如,文件已经删除),就会忽略该选项。

如果手动地控制共享类数据文件的使用,那么请当心命令行选项在未来的发行版中可能会变化 —— 至少它的文档是这么说的。

Sun 声称在启用的时候,启动时间大约改善了 30 %。

Solaris 线程优先级

Java Thread 类包含一个 setPriority() 方法,有助于为创建的线程分配一个优先级。关于 setPriority() 方法需要了解的关键是:它的设置可以被忽略。而且,不同的平台有不同的线程调度模型,所以会产生不同的结果。

在 5.0 发行版中,针对 Solaris 平台的线程优先级实现方式做了一些修改,返回到一种更原始的行为上。因此,从 10 个逻辑的 Java 优先级(从 Thread.MIN_PRIORITY 到 Thread.MAX_PRIORITY)到本机优先级的映射是不同的:

Java 优先级范围在 5 到 10 之间的线程被映射为高

Java 优先级范围在 1 到 4 之间的线程被映射为低

就是这么简单 —— 如果觉得优先级更少就会更简单的话。这个变化背后的理由是:为了保证 Java 线程可以被调度成按照与本机线程和进程相同的优先级运行。但是这就意味着在 5 到 10 之间的 Java 优先级处理起来没有差别。

如果是在 Linux 或 Microsoft Windows 平台上,那么可以忽略这个变化。但是,如果用户是在 Solaris 平台上,那么还是应当注意这个差别。

服务器类别探测

默认情况下,除非使用的是 64 位芯片(它默认使用服务器虚拟机),否则 JVM 启动时用的是客户端 HotSpot 虚拟机。可以使用 -server 命令行选项强制启用服务器 HotSpot 虚拟机。如果使用的是 32 位的 Solaris SPARC 机或者 Linux/Solaris i586 系统,而且没有指定 -client 或 -server 选项,那么虚拟机会自动检测要使用哪个版本。Microsoft Windows 默认采用客户端虚拟机。

在使用自动探测时,如果一台机器拥有至少两个 CPU 和 2GB 物理内存,就会把它当成服务器。如果不介意较慢的启动时间,在没有最近出现的共享内存时,服务器虚拟机运行一段时间会变快。

垃圾收集

如果确实在运行服务器虚拟机,或者至少是在服务器级别的机器上,那么默认的垃圾收集器就会从老式的串行版本(-XX:+UseSerialGC)变成新式的并行收集器(-XX:+UseParallelGC)。其他与堆尺寸和时间限制有关的默认设置也发生了变化。

结束语

我们完成了这个技巧,同时又回到起点。随着每个 Java 的发行版,事情都会有些变化。虚拟机的配置有了新的、不同的选项,承诺会有更快的启动、更小的内存开销。J2SE 平台的 5.0 发行版也遵循这个模式。

上一页  1 2 3 

Tags:驯服 Tiger 虚拟

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接