IBM 64-bit Runtime Environment for Windows AMD64 architecture,Java 2 Technology Edition,V1.4.2

Runtime Environment 用户指南


版权信息

注意:在使用本资料及其支持的产品之前,请务必阅读声明中的一般信息。

本版本的《用户指南》适用于 IBM 64-bit Runtime Environment for Windows AMD64 architecture,Java 2 Technology Edition,V1.4.2 及其所有后续发行版和修订版,直到在新版中另有声明为止。

(c) Copyright Sun Microsystems, Inc. 1997, 2003, 901 San Antonio Rd., Palo Alto, CA 94303 USA. All rights reserved.

(c) Copyright International Business Machines Corporation, 1999, 2004. All rights reserved.

U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.

前言

IBM(R) 64-bit Runtime Environment for Windows(R) AMD64 architecture,Java(TM) 2 Technology Edition,V1.4.2 包含 Java Virtual Machine(JVM)、核心 Sun Microsystems Java 类和支持文件。Runtime Environment 并未包含在 SDK 软件包中找到的所有类。

本《用户指南》提供有关 Runtime Environment 的一般信息和有关 Runtime Environment 的 IBM 实现相比较 Sun 实现而言所有不同的特定信息。请阅读本《用户指南》及以下 Sun Web 站点上的更多详尽文档:http://java.sun.com

Runtime Environment 在 Microsoft(R) Windows XP 64 位版和 Windows Server 2003 64 位版上受支持。

IBM JVM Diagnostics Guide 提供了有关 IBM JVM 的更多详细信息。

注意,SDK 包括 Runtime Environment for Windows,它使您只能运行 Java 应用程序。如果安装了 SDK,则表示已包括 Runtime Environment。

术语“Runtime Environment”和“Java Virtual Machine”在本《用户指南》中是可互换使用的。

目录

版权信息
前言
使用 Runtime Environment
获取 IBM build 和版本号
启动 Java 应用程序
命令摘要
选项
Java 命令全局化
使用类路径
自动执行 Java 文件
指定垃圾收集策略
just-in-time(JIT)编译器
实现 RMI 的连接处理程序池
JVM 如何处理信号
JVM 所使用的信号
将本机代码驱动程序链接到信号链接库
使用输入法编辑器
使用带繁体中文的 more 命令
对本《用户指南》的意见?
声明
商标

使用 Runtime Environment

获取 IBM build 和版本号

要获取 IBM build 和版本号,在命令提示下输入:

java -version

启动 Java 应用程序

java 工具可启动 Java 应用程序。它需要初始 Java 类名作为参数。如果不提供该参数,则会打印用法消息。

JVM 在以下三组位置中搜索初始类和其它使用的类:引导类路径、已安装的扩展和用户类路径。在类名或 JAR 文件名后的参数传递到主函数。

javaw 命令与 java 相同,只是 javaw 没有关联的控制台窗口。请在不需要出现命令提示窗口时使用 javaw。如果启动失败,javaw 启动程序将显示一个带有错误信息的对话框。

命令摘要

javajavaw 命令具有以下语法:

java [ options ] class [ arguments ... ]
java [ options ] -jar file.jar [ arguments ... ]
javaw [ options ] class [ arguments ... ]
javaw [ options ] -jar file.jar [ arguments ... ]

括号内的项是可选的。

options
命令行选项。
class
要调用的类名。
file.jar
要调用的 jar 文件的名称。只能与 -jar 一起使用。
argument
传递到函数的参数。

如果指定 -jar 选项,则命名的 JAR 文件包含应用程序的类和资源文件,启动类由主类清单头指示。

选项

启动程序具有一系列标准选项,这些选项在当前的 Runtime Environment 中受支持,在今后的发行版也将受到支持。此外,还有一系列非标准选项。

标准选项

非标准选项

下面列出的 -X 选项为非标准选项,可能随时更改,而不另行通知。

Java 命令全局化

java 命令和其它 Java 启动程序命令(例如,javaw)允许类名被指定为在当前语言环境字符集中的 Unicode 字符。

您也可以通过使用 Java 转义序列在类名和参数中指定任何 Unicode 字符。要完成此操作,必须指定 -Xargencoding。要指定 Unicode 字符,请以 \u#### 格式使用转义序列,其中 # 是十六进制数字(0-9,A-F)。

或者,要指定类名和命令参数是 UTF8 或 ISO8859_1 编码,请分别使用 -Xargencoding:utf8-Xargencoding:latin

java and javaw 命令给出已转换的输出消息。这些消息基于 Java 正在运行的语言环境而不同。详细的错误描述和 java 返回的其它调试信息都是以英文显示的。

使用类路径

您可以将类名指定为包含完整路径和 .class 扩展名的完整文件名。在先前版本中,只可以指定相对于 CLASSPATH 的类,不允许包含 .class 扩展名。使用完整文件名就可以从桌面或文件启动程序启动 Java 应用程序。如果指定带路径和扩展名的 .class 文件,则指定的路径将添加到 CLASSPATH例如,命令 java c:\myapp\thisapp.class 等同于指定 java -classpath c:\myapp thisapp

自动执行 Java 文件

要设置 java 类或 jar 文件以从文件自动执行,请使用 Windows 资源管理器的工具->文件夹选项->文件类型选项。也可以在命令提示符下输入以下命令:

assoc .class=javaclass 
ftype javaclass=C:\Program Files\IBM\Java142\jre\bin\java.exe %l %*
注:
  1. %l 是字母 l,而不是数字 1。
  2. 如果 Java 的安装目录不是 C:\Program Files\IBM\Java142\,请替换您的目录。

指定垃圾收集策略

-Xgcpolicy JVM 运行时选项指定垃圾收集策略。

-Xgcpolicy 的值为 optthruput(缺省值)、optavgpausegencon。该选项控制垃圾收集器的行为,在应用程序和整个系统的吞吐量与由于垃圾收集引起的暂停时间之间进行权衡。

选项的格式及其值是:

-Xgcpolicy:optthruput

-Xgcpolicy:optavgpause

-Xgcpolicy:gencon

暂停时间

当堆中的可用空间无法立即满足应用程序创建对象的尝试时,垃圾收集器就负责标识未引用的对象(垃圾)、删除它们并使堆返回到可以快速满足立即和后继分配请求的状态。这样的垃圾收集循环在应用程序代码执行中引起了偶发的意外暂停。因为应用程序的大小和复杂程度不断增长,堆也相应不断扩大,所以此垃圾收集暂停时间在大小和重要性方面也趋于增长。缺省垃圾收集值 optthruput 将很高的吞吐量传递到应用程序,但它是以这些偶发的暂停为代价的,这些暂停可能为几毫秒也可能长达好几秒,这取决于堆的大小和垃圾的数量。

减少暂停时间

JVM 使用两种技术减少暂停时间:

-Xgcpolicy:optavgpause 命令行选项请求使用并发垃圾回收以显著减少花费在垃圾回收暂停上的时间。并发垃圾回收通过与正常的程序执行一起并发执行垃圾回收活动,以使堆的回收引起的中断最少,从而减少暂停时间。-Xgcpolicy:optavgpause 选项还限制增加堆大小对垃圾回收暂停的时间长度所产生的影响。-Xgcpolicy:optavgpause 选项对于有大型堆的配置最有用。随着暂停时间的减少,您可能会经历应用程序吞吐量的减少。

并发垃圾回收期间,大量时间浪费在标识不能回收的相对持久的对象上。如果垃圾回收仅集中在那些最可能再循环的对象上,则您可以进一步减少一些应用程序的暂停时间。分代垃圾回收通过将堆分成两“代”(“看管期”和“使用期”区域)来完成该操作。根据对象年龄将其放在这些区域之一。“看管期”是两个中较小的一个,且包含较年轻的对象;“使用期”较大并包含较老的对象。首先将对象分配到“看管期”;如果它们存活时间足够长则将最终升级到“使用期”区域。

分代垃圾回收依赖于大部分不持久的对象。分代垃圾回收将主要工作都集中于收回“看管期”上的存储,从而减少暂停时间,因为看管期具有最能循环使用的空间。与偶尔发生但暂停时间冗长地回收整个堆不同,“看管期”的回收发生得较频繁,而且,如果“看管期”足够小,暂停时间会相当短。 然而,分代垃圾回收有缺陷,随着时间的过去,如果太多对象过于持久,则“使用期”区域可能变满。当出现该情况时要将暂停时间最小化,则使用并发垃圾回收与分代垃圾回收的组合。-Xgcpolicy:gencon 选项请求联合使用并发与分代垃圾回收,以帮助将耗费在任何垃圾回收暂停上的时间减到最短。

具有很满的堆的环境

如果 Java 堆快满了,并且几乎没有要回收的垃圾,请求新对象可能不会被很快地满足,因为没有立即可用的空间了。如果在容量接近于满时操作堆,无论使用上述的哪个选项,应用程序性能都可能会受损;另外,如果继续请求更多的堆空间,则应用程序会接收到“内存不足”异常,如果未捕获和处理异常的话,这将导致 JVM 终止。JVM 将在此点产生“javadump”诊断文件。在这些情况下,建议您使用 -Xmx 选项增加堆大小或减少使用中的应用程序对象的数目。

just-in-time(JIT)编译器

在 Java 应用程序和 applet 运行期间,Just-in-time(JIT)编译器(jitc.dll)为在 Java 应用程序和 applet 中频繁使用的字节码序列动态生成机器代码。

Runtime Environment for Windows 包含 JIT(jitc.dll),它在缺省情况下是启用的。可以禁用 JIT 以帮助隔离 Java 应用程序、applet 或编译器本身发生的问题。

要禁用 JIT,请使用 -Xint 选项。 在运行应用程序的命令提示符中,输入:

    java -Xint class

要验证是否启用了 JIT,请在命令提示下输入:

    java -version

如果正在使用 JIT,将显示包含以下内容的消息:

(JIT enabled)

如果 JIT 不在使用,则显示一条包含以下内容的消息:

(JIT disabled)

实现 RMI 的连接处理程序池

缺省情况下,启用 RMI 连接处理程序的线程池。

要启用在 RMI TCPTransport 级别实现的连接池,请设置选项

-Dsun.rmi.transport.tcp.connectionPool=true(或任意非空值)

此版本的 Runtime Environment 不具有可以用来限制连接池中线程数的任何设置。

要获取更多信息,请参阅 Sun Java 站点:http://java.sun.com

JVM 如何处理信号

当出现一个 JVM 所关注的信号时,将调用一个信号处理程序。该信号处理程序判断它是被 Java 还是非 Java 线程调用。

如果信号是用于 Java 线程的,则 JVM 将接管对信号处理的控制。如果对该信号的应用处理程序已安装,且未指定 -Xnosigchain 命令行选项,则在 JVM 完成处理之后,会调用该信号的应用处理程序。

如果信号是非 Java 线程的,并且安装 JVM 的应用程序以前安装过自己的信号处理程序,则控制权将交给该处理程序。否则,如果 JVM 或 Java 应用程序请求信号,则忽略该信号或进行缺省操作。

该规则的例外是在 Windows 上,其中对于外部产生的信号(例如当键入 CTRL-BREAK),将创建一个新线程来执行此信号处理程序。在这种情况下,JVM 信号处理程序执行处理,并且如果对该信号的应用处理程序已安装,而未指定 -Xnosigchain 命令行选项,则调用该信号的应用处理程序。

对于异常及错误信号,JVM 将执行下列两种操作之一:

关于编写指定以上挂钩的启动程序,请参阅 http://www-106.ibm.com/developerworks/java/library/i-signalhandling/。此项是为 Java V1.3.1 而写,但仍适用于更高版本。

对于中断信号,JVM 还输入一个受控的关闭序列,但是这次它将被视为符合以下条件的正常终止:

此关闭与由一个对 Java 方法 System.exit() 的调用所启动的关闭相同。

JVM 所使用的其它信号是用于内部控制用途的,并且不会导致该控制终止。唯一关注的控制信号是 SIGBREAK,它会导致生成 Javadump。

JVM 所使用的信号

下面的表 1 显示了 JVM 所使用的信号。 信号在表中按类型或使用情况分组,如下所示:

表 1. JVM 所使用的信号
信号名称 信号类型 描述 是否被 -Xrs 禁用
SIGSEGV 异常 访问内存不正确(写到不可访问的内存)
SIGILL 异常 非法指令(尝试调用未知的机器指令)
SIGFPE 异常 浮点异常(除数为零)
SIGABRT 错误 异常终止。无论何时检测到 JVM 错误,JVM 都发出该信号。
SIGINT 中断 交互式注意信号(CTRL-C)。JVM 正常退出。
SIGTERM 中断 终止请求。JVM 将正常退出。
SIGBREAK 控制 从终端发出的断开信号。JVM 以此来获取 Javadump。

使用 -Xrs(减少信号使用)选项来防止 JVM 处理大多数的信号。要获取更多的信息,请参阅 Sun 的 Java 应用启动程序页面,地址是 http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html

JVM 线程上的信号 2(SIGINT)4(SIGILL)6(SIGABRT)8(SIGFPE)11(SIGSEGV)会导致 JVM 关闭;因此,应用程序信号处理程序不应该尝试从这些信号中进行恢复,除非该处理程序不再需要 JVM 服务。

将本机代码驱动程序链接到信号链接库

Runtime Environment 包含信号链接。信号链接使 JVM 能够更有效的同安装有自己信号处理程序的本机代码进行相互操作。

信号链接使应用程序能够在 msvcrt.dll 之前链接并装入共享库 jsig.dll。jsig.dll 库确保拦截对 signal() 的调用,以便它们的处理程序不会替换 JVM 的信号处理程序。反之,这些调用将保存新的信号处理程序,或者将它们“链接”到 JVM 安装的处理程序之后。然后,当这些信号中的任何信号出现且发现不是针对 JVM 时,预先安装的处理程序将被调用。

要使用 jsig.dll,请将它与创建或嵌入 JVM 的应用程序链接。

使用输入法编辑器

当使用输入法编辑器(IME)时,建议您在使用工作区进行任何其它操作之前完成字符编写和日历选择。

使用带繁体中文的 more 命令

繁体中文的用户不应直接将来自 Java 应用程序的输出以管道输出到 more 命令。而是应将输出输送到临时 文件,然后独立地查看文件。

对本《用户指南》的意见?

如果对本《用户指南》的有用性或其它方面有任何意见,我们欢迎您通过以下方法提出宝贵意见。 请注意设置这些方法的目的不是为了回答技术查询,仅仅是为了接收有关对文档的意见。请通过以下方法发送您的意见:

请阅读此注意事项。选择将消息发送给 IBM,就承认您的消息中包含的所有 信息(包括诸如问题、意见、建议或同样的信息等反馈数据)被认为是非机密的,IBM 对 诸如此类信息没有任何义务,可以没有限制地对这些信息进行免费再生产、使用、泄露和分发给其它人。而且,IBM 可以免费使用这些信息中包含的想法、概念、专有技术或技术,包括但不限于开发、生产和销售加入这些信息的产品。

声明

本信息是为在美国提供的产品和服务编写的。IBM 可能在其他国家或地区不提供本文档中讨论的产品、服务或功能特性。有关您当前所在区域的产品和服务的信息,请向您当地的 IBM 代理咨询。任何对 IBM 产品、程序或服务的引用并非意在明示或暗示只能使用 IBM 的产品、程序或服务。只要不侵犯 IBM 的知识产 权,任何同等功能的产品、程序或服务,都可以代替 IBM 产品、程序或服务。但是,评估和验证任何非 IBM 产品、程序或服务,则由用户自行负责。

IBM 公司可能已拥有或正在申请与本文档内容有关的各项专利。提供本文档并未授予用户使用这些专利的任何许可。您可以用书面方式将许可查询寄往:

有关双字节(DBCS)信息的许可查询,请与您所在国家或地区的 IBM 知识产权部门联系,或用书面方式将查询寄往:

本条款不适用英国或任何这样的条款与当地法律不一致的国家或地区:

International Business Machines Corporation“按现状”提供本出版物,不附有任何种类的(无论是明示的还是暗含的)保证,包括但不限于暗含的有关非侵权、适销和适用于某种特定用途的保证。某些国家或地区在某些交易中不允许免除明示或暗含的保证。因此本条款可能不适用于您。

本信息中可能包含技术方面不够准确的地方或印刷错误。此处的信息将定期更改;这些更改将编入本资料的新版本中。IBM 可以随时对本资料中描述的产品和/或程序进行改进和/或更改,而不另行通知。

本信息中对非 IBM Web 站点的任何引用都只是为了方便起见才提供的,不以任何方式充当对那些 Web 站点的保证。该 Web 站点中的资料不是 IBM 产品资料的一部分,使用那些 Web 站点带来的风险将由您自行承担。

IBM 可以按它认为适当的任何方式使用或分发您所提供的任何信息而无须对您承担任何责任。

本程序的被许可方如果要了解有关程序的信息以达到如下目的:(i) 允许在独立创建的程序和其他程序(包括本程序)之间进行信息交换,以及 (ii) 允许对已经交换的信息进行相互使用,请与下列地址联系:

只要遵守适当的条件和条款,包括某些情形下的一定数量的付费,都可获得这方面的信息。

本资料中描述的许可程序及其所有可用的许可资料均由 IBM 依据 IBM 客户协议、IBM 国际程序许可协议或任何同等协议中的条款提供。

此处包含的任何性能数据都是在受控环境中测得的。因此,在其他操作环境中获得的数据可能会有明显的不同。有些测量可能是在开发集的系统上进行的,因此不保证与一般可用系统上进行的测量结果相同。此外,有些测量是通过推算而估计的,实际结果可能会有差异。本文档的用户应当验证其特定环境的适用数据。

涉及非 IBM 产品的信息可从这些产品的供应商、其出版说明或其他可公开获得的资料中获取。IBM 没有对这些产品进行测试,也无法确认其性能的精确性、兼容性或任何其他关于非 IBM 产品的声明。有关非 IBM 产品性能的问题应当向这些产品的供应商提出。

商标

IBM 是 International Business Machines Corporation 在美国和/或其他国家的商标或注册商标。

Java 和所有基于 Java 的商标和徽标是 Sun Microsystems, Inc. 在美国和/或其他国家或地区的商标或注册商标。

Microsoft、Windows、Windows NT 和 Windows 徽标是 Microsoft Corporation 在美国和/或其他国家或地区的商标。

其他公司、产品或服务名称可能是其他公司的商标或服务标记。

本产品包括由 Apache Software Foundation http://www.apache.org/ 开发的软件。