`
lzkyo
  • 浏览: 463799 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

调整 Java 虚拟机

阅读更多

尽管 JVM 调整操作随 JVM 提供程序的不同而有所变化,但一般的调整概念适用于所有 JVM。这些一般的概念包括:
编译器调整。在服务器运行时期间,所有 JVM 都使用即时(JIT)编译器来将 Java 字节码编译为本机指令。
Java 内存或堆调整。JVM 内存管理功能(即垃圾回收)为提高 JVM 性能提供了其中一种最大的可能性。
类装入调整。
过程
优化启动性能和运行时性能
在某些环境中,优化 WebSphere Application Server 的启动性能比优化运行时性能更重要。在另一些环境中,优化运行时性能更为重要。缺省情况下,IBM JVM 是针对运行时性能进行优化的,而基于 HotSpot 的 JVM 是针对启动性能进行优化的。

Java JIT 编译器在很大程度上决定了是优化启动性能还是优化运行时性能。编译器使用的初始优化级别影响编译类方法所耗用的时间以及启动服务器所耗用的时间。为了提高启动速度,可以降低编译器所使用的初始优化级别。这意味着,由于现在使用较低的优化级别来编译类方法,所以应用程序的运行时性能可能会下降。

因为编译器在运行时执行阶段会根据自己的判断来重新编译类方法以提高性能,所以,很难提供一个有关特定的运行时性能影响的说明。最终,应用程序的持续时间是影响运行时性能下降程度的主要原因。运行时间较短的应用程序的方法被重新编译的可能性较高。运行时间较长的应用程序的方法被重新编译的可能性较低。IBM JVM 的缺省设置是使用高优化级别来执行初始编译。如果需要更改此行为,可以使用以下 IBM JVM 选项:

-Xquickstart

此设置影响 IBM JVM 使用较低优化级别来编译类方法的方式,这将提高服务器启动速度,但会使运行时性能下降。缺省情况下,如果未指定此参数,IBM JVM 最初将使用较高的初始优化级别来执行编译。此设置能够提高运行时性能,但会减慢服务器启动速度。

缺省值: 高初始编译器优化级别
建议值: 高初始编译器优化级别
用法: -Xquickstart 可以加快服务器启动速度。

基于 Sun 的 Hotspot 技术的 JVM 最初使用低优化级别来编译类方法。使用下列 JVM 选项来更改此行为:

-server

基于 Sun 的 Hotspot 技术的 JVM 最初使用低优化级别来编译类方法。这些 JVM 使用简单编译器和能够进行优化的 JIT 编译器。通常情况下,使用简单 JIT 编译器。然而,可以通过设置此选项来使用能够执行优化的编译器。此更改将显著提高服务器的性能,但使用能够执行优化的编译器时,服务器的预备时间将会较长。

缺省值: 简单编译器
建议值: 能够执行优化的编译器
用法: -server 启用能够执行优化的编译器。

设置堆大小 下列命令行参数对于设置堆大小来说很有用。
-Xms
此设置控制 Java 堆的初始大小。正确调整此参数有助于降低垃圾回收开销,从而缩短服务器响应时间并提高吞吐量。对于某些应用程序来说,此选项的缺省设置可能会太低,从而导致发生大量小型垃圾回收。

缺省值: 256 MB
建议值: 随工作负载的不同而有所变化,但高于缺省值。
用法: -Xms256m 将初始堆大小设置为 256 兆字节

-Xmx
此设置控制 Java 堆的最大大小。正确调整此参数有助于降低垃圾回收开销,从而缩短服务器响应时间并提高吞吐量。对于某些应用程序来说,此选项的缺省设置可能会太低,从而导致发生大量小型垃圾回收。

缺省值: 512 MB
建议值: 随工作负载的不同而有所变化,但高于缺省值。
用法: -Xmx512m 将最大堆大小设置为 512 兆字节

-Xlp
此设置可以与 IBM JVM 配合使用,以使用大页来分配堆。然而,如果使用此设置,那么必须将操作系统配置为支持大页。使用大页可以降低 CPU 跟踪堆内存时的开销,并且还允许创建较大的堆。

请参阅调整操作系统 以了解有关调整操作系统的更多信息。

应该指定的堆大小取决于不同时段的堆使用情况。在堆大小频繁更改的情况下,对 Xms 和 Xmx 参数指定相同的值可以提高性能。

调整 IBM JVM 的垃圾回收器。
使用 Java -X 选项来查看内存选项列表。

-Xgcpolicy
将 gcpolicy 设置为 optthruput 会禁用并发标记。如果没有暂停时间问题(表现为应用程序响应时间不规律),那么应该使用此选项来实现最大吞吐量。将 gcpolicy 设置为 optavgpause 会使用缺省值来启用并发标记。此设置将减少由正常垃圾回收所引起的应用程序响应时间不规律情况。然而,此选项可能会降低整体吞吐量。

缺省值: optthruput 
建议值: optthruput 
用法: Xgcpolicy:optthruput

-Xnoclassgc
缺省情况下,当一个类没有任何活动实例时,JVM 就会从内存中卸装该类,但是这样会使性能下降。如果关闭类垃圾回收,就可以消除由于多次装入和卸装同一个类而造成的开销。

如果不再需要某个类,那么该类在堆中所占用的空间通常将用于创建新对象。但是,如果应用程序通过创建类的新实例来处理请求,并且该应用程序的请求是随机出现的,那么可能会发生以下情况:先前请求者完成后,正常的类垃圾回收将通过释放这个类占用的堆空间来清除这个类,但当下一个请求出现时,又必须将这个类重新实例化。在这种情况下,您可能想使用此选项来禁用类垃圾回收。

缺省值: 启用类垃圾回收
建议值: 禁用类垃圾回收
用法: Xnoclassgc 禁用类垃圾回收

有关其他信息,请参阅下列 DeveloperWorks 文章:
http://www.ibm.com/developerworks/java/
调整 Sun JVM 的垃圾回收器
在 Solaris 平台上,WebSphere Application Server 在 Sun Hotspot JVM 上运行,而不是在 IBM JVM 上运行。对 Sun JVM 使用正确的调整参数以利用其性能优化功能十分重要。

Sun Hotspot JVM 依靠分代垃圾回收来实现最佳性能。下列命令行参数对于调整垃圾回收来说非常有用。

-XX:SurvivorRatio
将 Java 堆划分为旧对象(长生命周期对象)区域和新对象区域。新对象区域进一步细分为两部分,第一部分用于分配给新对象(初始区域),第二部分存放那些经过其前几次垃圾回收之后、但在被提升为旧对象之前仍在使用中的新对象(幸存者空间)。幸存者比率是堆的新对象区域中初始区域与幸存者空间的比率。增大此设置将针对需要创建大量对象但仅保留少量对象的应用程序优化 JVM。与其他应用程序相比,WebSphere Application Server 会生成更多中等生命周期对象和长生命周期对象,因此,应该将此设置设置为小于缺省值。

缺省值: 32
建议值: 16
用法: -XX:SurvivorRatio=16

-XX:PermSize
为永久生成对象保留的堆区域存储 JVM 的所有反射数据。对于动态地装入和卸装大量类的应用程序来说,应该增大此大小以优化它们的性能。通过将此参数设置为 128MB,可以消除增大此部分堆所需的开销。

建议值: 128 MB
用法: XX:PermSize=128m 将 perm 大小设置为 128 兆字节。

-Xmn
此设置控制允许新生成的对象在堆中耗用的空间量。正确调整此参数有助于降低垃圾回收开销,从而缩短服务器响应时间并提高吞吐量。此参数的缺省设置通常过低,这将导致执行大量的小型垃圾回收操作。如果将此参数设置得过高,可能会导致 JVM 仅执行大型(全面)垃圾回收。这些垃圾回收操作通常会耗时几秒钟,这将严重影响服务器的整体性能。您必须保持将此参数设置为小于整个堆大小的一半,以避免这种情况出现。

缺省值: 2228224 字节
建议值: 大约整个堆大小的 1/4
用法: -Xmn256m 将大小设置为 256 兆字节。

-Xnoclassgc
缺省情况下,当一个类没有任何活动实例时,JVM 就会从内存中卸装该类,但是这样会使性能下降。如果关闭类垃圾回收,就可以消除由于多次装入和卸装同一个类而造成的开销。

如果不再需要某个类,那么该类在堆中所占用的空间通常将用于创建新对象。但是,如果应用程序通过创建类的新实例来处理请求,并且该应用程序的请求是随机出现的,那么可能会发生以下情况:先前请求者完成后,正常的类垃圾回收将通过释放这个类占用的堆空间来清除这个类,但当下一个请求出现时,又必须将这个类重新实例化。在这种情况下,您可能想使用此选项来禁用类垃圾回收。

缺省值: 启用类垃圾回收
建议值: 禁用类垃圾回收
用法: Xnoclassgc 禁用类垃圾回收

有关调整 Sun JVM 的其他信息,请参阅 Java HotSpot VM 的性能文档。

调整 HP JVM 的垃圾回收器
HP JVM 依靠分代垃圾回收来实现最佳性能。下列命令行参数对于调整垃圾回收来说非常有用。

-Xoptgc
此设置针对包含许多短生命周期对象的应用程序优化 JVM。如果未指定此参数,那么 JVM 通常执行大型(全面)垃圾回收。全面垃圾回收会花费几秒钟时间,这将显著影响服务器性能。

缺省值: off
建议值: on
用法: -Xoptgc 启用优化的垃圾回收。

-XX:SurvivorRatio
将 Java 堆划分为旧对象(长生命周期对象)区域和新对象区域。新对象区域进一步细分为两部分,第一部分用于分配给新对象(初始区域),第二部分存放那些经过其前几次垃圾回收之后、但在被提升为旧对象之前仍在使用中的新对象(幸存者空间)。幸存者比率是堆的新对象区域中初始区域与幸存者空间的比率。增大此设置将针对需要创建大量对象但仅保留少量对象的应用程序优化 JVM。与其他应用程序相比,WebSphere Application Server 会生成更多中等生命周期对象和长生命周期对象,因此,应该将此设置设置为小于缺省值。

缺省值: 32
建议值: 16
用法: -XX:SurvivorRatio=16

-XX:PermSize
为永久生成对象保留的堆区域存储 JVM 的所有反射数据。对于动态地装入和卸装大量类的应用程序来说,应该增大此大小以优化它们的性能。通过将此参数指定为 128 兆字节,可以消除增大此部分堆所需的开销。

缺省值: 0
建议值: 128 兆字节
用法: -XX:PermSize=128m 将 PermSize 设置为 128 兆字节

-XX:+ForceMmapReserved
缺省情况下,Java 堆以“惰性交换”方式进行分配。在此方式下,将根据需要来分配内存页,这样可以节省交换空间,但是也将强制使用 4KB 页。在大型堆系统中,这种内存分配方式允许堆包含数以十万计的页。此命令禁用“惰性交换”并允许操作系统使用较大的内存页,从而优化对构成 Java 堆的内存的访问。

缺省值: off
建议值: on
用法: -XX:+ForceMmapReserved 将禁用“惰性交换”。

-Xmn
此设置控制允许新生成的对象在堆中耗用的空间量。正确调整此参数有助于降低垃圾回收开销,从而缩短服务器响应时间并提高吞吐量。此参数的缺省设置通常过低,这将导致执行大量的小型垃圾回收操作。

缺省值: 没有缺省值
建议值: 大约整个堆大小的 3/4
用法: -Xmn768m 将大小设置为 768 兆字节

虚拟页大小
通过将 Java 虚拟机的指令页大小和数据页大小设置为 64MB,可以提高性能。

缺省值: 4MB 
建议值: 64MB 
用法: 使用以下命令。命令输出提供了进程可执行文件的当前操作系统特征:
chatr +pi64M +pd64M /opt/WebSphere/
AppServer/java/bin/PA_RISC2.0/
native_threads/java


-Xnoclassgc
缺省情况下,当一个类没有任何活动实例时,JVM 就会从内存中卸装该类,但是这样会使性能下降。如果关闭类垃圾回收,就可以消除由于多次装入和卸装同一个类而造成的开销。

如果不再需要某个类,那么该类在堆中所占用的空间通常将用于创建新对象。但是,如果应用程序通过创建类的新实例来处理请求,并且该应用程序的请求是随机出现的,那么可能会发生以下情况:先前请求者完成后,正常的类垃圾回收将通过释放这个类占用的堆空间来清除这个类,但当下一个请求出现时,又必须将这个类重新实例化。在这种情况下,您可能想使用此选项来禁用类垃圾回收。

缺省值: 启用类垃圾回收
建议值: 禁用类垃圾回收
用法: Xnoclassgc 禁用类垃圾回收

有关调整 HP 虚拟机的其他信息,请参阅 Java 技术软件 HP-UX 11i。

调整 HP 的 JVM for HP-UX 设置下列选项以提高应用程序性能:
-XX:SchedulerPriorityRange=SCHED_NOAGE
-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.DevPollSelectorProvider
-XX:-ExtraPollBeforeRead

分享到:
评论

相关推荐

    java虚拟机

    Java虚拟机(JVM,Java Virtual Machine)是Java平台的核心组成部分,它负责执行Java程序,为Java代码提供了跨平台的运行环境。Java虚拟机的概念始于Sun Microsystems,现在由Oracle公司继续发展和维护。JVM的设计...

    深入java虚拟机 高清pdf 高清高清高清

    《深入Java虚拟机》这本书是Java开发者深入了解JVM(Java Virtual Machine)的必备经典之作。它详尽地探讨了Java虚拟机的工作原理、内存管理、类加载机制、字节码执行以及性能优化等多个核心主题,旨在帮助开发者...

    Java虚拟机规范(Java SE 7).pdf

    《Java虚拟机规范(Java SE 7)》是Java开发者深入理解Java运行机制的重要参考资料,它详细阐述了Java虚拟机(JVM)的工作原理和内存管理机制,为开发者提供了宝贵的洞察力,帮助他们优化程序性能,理解和解决运行时...

    java虚拟机常用命令

    Java虚拟机(JVM)是Java程序的运行环境,提供了Java程序运行所需的各种资源和管理机制。在Java虚拟机运行过程中,我们可能需要使用各种命令工具来监控和诊断可能出现的问题。以下是一些常用的JVM命令工具及其知识点...

    java虚拟机的两本书

    Java虚拟机(JVM)是Java编程语言的核心组成部分,它为Java程序提供了跨平台的运行环境。这两本书,《深入Java虚拟机》和《Java虚拟机第二版》,是深入理解JVM内部工作原理的重要参考资料。 《深入Java虚拟机》通常...

    JAVA虚拟机解读入门

    《JAVA虚拟机解读入门》是一本面向初学者的指南,旨在带领读者深入理解Java虚拟机(JVM)的工作原理和内部机制。JVM是Java语言的核心组成部分,它为Java程序提供了一个跨平台的运行环境,使得“一次编写,到处运行”...

    深入JAVA虚拟机 随书源码 JVM规范

    Java虚拟机(JVM)是Java程序运行的核心,它负责解释和执行字节码,为开发者提供了跨平台的运行环境。深入理解JVM对于优化代码性能、排查问题以及提升编程能力至关重要。本篇文章将详细探讨JVM的工作原理、内存管理...

    深入JAVA虚拟机 不那么完美的第二版.pdf.zip

    《深入JAVA虚拟机 不那么完美的第二版》这本书虽然在印刷上可能存在一些小瑕疵,但这并不影响我们从中汲取宝贵的Java虚拟机(JVM)知识。Java虚拟机是Java平台的核心组成部分,它负责执行Java程序,提供了跨平台的...

    java虚拟机(jvm)介绍以及相关参数设置与调优

    "java虚拟机(jvm)介绍以及相关参数设置与调优" Java虚拟机(JVM)是Java平台的核心组件之一,它提供了一个运行Java字节码的环境,...Java虚拟机是一个复杂的系统,需要对其进行深入了解和调整,以获得最佳的性能。

    Java运行原理与Java虚拟机.pdf

    ### Java运行原理与Java虚拟机 #### 一、Java运行原理概述 Java作为一种跨平台的编程语言,其独特之处在于它的编译和解释过程。Java程序的执行涉及到两个主要步骤:首先是编译阶段,其次是解释执行阶段。 1. **...

    深入JAVA虚拟机第二版 Bill Venners著 曹晓钢 蒋靖译

    《深入JAVA虚拟机第二版》是由Bill Venners撰写,并由曹晓钢和蒋靖翻译的中文书籍。这本书是Java开发者必备的经典读物,它详细地解析了Java虚拟机(JVM)的工作原理,帮助读者深入理解Java程序的运行机制。尽管描述...

    安卓2.2和2.3等可用的java虚拟机及使用方法

    在安卓2.2和2.3这两个版本的操作系统上,Java虚拟机(Java Virtual Machine,简称JVM)扮演着至关重要的角色,它是Android系统运行基于Java语言的应用程序的基础。Java虚拟机允许Android设备运行编译后的Dalvik ...

    揭秘Java虚拟机-JVM设计原理与实现

    《揭秘Java虚拟机-JVM设计原理与实现》这本书深入探讨了Java虚拟机(JVM)的工作原理及其在Java编程中的核心地位。Java虚拟机是Java平台的核心组成部分,它负责执行字节码,为开发者提供了跨平台的运行环境。以下是...

    Java 虚拟机规范.pdf

    - 理解JVM规范有助于对Java程序进行性能调优,如调整堆大小、设置垃圾回收参数等。 Java 虚拟机规范是Java平台的重要组成部分,它不仅保证了Java语言的跨平台特性,也为Java的运行提供了强大的支撑。Java开发人员...

    JAVA虚拟机(JVM)规范(中文版).rar

    **JAVA虚拟机(JVM)规范** JAVA虚拟机(JVM)是Java语言的核心组成部分,它为Java程序提供了运行环境,使得Java代码能在任何支持JVM的平台上运行,实现了“一次编写,到处运行”的目标。JVM规范定义了Java程序如何...

    java 虚拟机 教程 pdf

    Java虚拟机(JVM)是Java程序运行的核心组件,它为Java代码提供了跨平台的运行环境。本教程将深入解析JVM的工作原理、内存管理、类加载机制以及性能优化等方面的知识,帮助Java程序员提升对这一关键技术的理解。 ...

    实战java虚拟机

    《实战Java虚拟机》这本书是Java开发者深入理解JVM(Java Virtual Machine)的重要参考资料。Java虚拟机是Java语言的核心组成部分,它负责解析和执行Java代码,实现跨平台的“一次编写,到处运行”。通过深入学习JVM...

    深入Java虚拟机(原书第二版清晰版).

    Java虚拟机允许开发者通过多种方式进行性能调优,包括调整内存大小、选择不同的垃圾回收器、设置JVM启动参数等。通过性能调优,Java应用程序可以更高效地运行,减少延迟和停顿时间,提升用户体验。 此外,本书还...

Global site tag (gtag.js) - Google Analytics