当前位置: 首页 > 工具软件 > OpenJ9 > 使用案例 >

OpenJ9和Hotspot对照

空谦
2023-12-01

命令行参数

尽管 OpenJ9 实现了自己的命令行界面,但 VM 会识别并接受许多热点选项以实现兼容性。默认情况下,VM 无法识别的任何选项都将被忽略,从而防止应用程序无法启动。您可以使用: -XX:-IgnoreUnrecognizedXXColonOptions关闭此行为

OpenJ9兼容选项

OpenJ9 兼容 HotSpot 的以下参数,可不做任何变更直接在 OpenJ9 上使用。

Option

Usage

-X 

显示有关非标准选项的帮助。

-Xbootclasspath 

指定引导类和资源的搜索路径。

-Xcheck 

在 VM 启动期间运行对 JNI 函数的其他检查。

-Xfuture 

启用严格的类文件格式检查。

-Xint

在仅解释模式下运行应用程序。

-Xlog

启用垃圾回收日志记录的某些形式将被识别。

-Xmn

设置 -Xgcpolicy:gencon 时新区域的初始大小和最大大小。

-Xms 

设置堆的初始大小。

-Xmx 

指定对象内存分配池的最大大小。

-Xnoclassgc 

禁用类垃圾回收 (GC)。

-Xrs

防止 OpenJ9 运行时环境处理信号。

-Xss 

设置 Java线程堆栈大小。

-Xverify:mode 

启用或禁用验证程序。

-XX:ConcGCThreads 

配置 GC 突变器后台线程的数量。

-XX:[+|-]AlwaysPreTouch 

在初始堆膨胀或堆扩展期间启用/禁用内存提交。

-XX:[+|-]CompactStrings 

启用/禁用压缩。

jdk16+

-XX:DiagnoseSyncOnValueBasedClasses

为基于值的类配置警告。

-XX:[+|-]DisableExplicitGC 

启用/禁用显式调用。

-XX:[+|-]ExitOnOutOfMemoryError 

在内存不足时触发 VM 关闭。

-XX:[+|-]HeapDumpOnOutOfMemory 

启用/禁用内存不足情况下的转储。

-XX:HeapDumpPath 

指定所有 VM 转储(包括堆转储、javacore 和系统转储)的目录。

-XX:[+|-]IgnoreUnrecognizedVMOptions 

指定是否忽略无法识别的顶级 VM 选项。

-XX:MaxHeapSize 

设置堆的初始大小。

-XX:MaxRAMPercentage 

将 Java 堆的初始大小设置为占总内存的百分比。

-XX:MaxHeapSize 

设置可为所有直接字节缓冲区保留的内存量限制。

-XX:MaxRAMPercentage 

将 Java 堆的最大大小设置为占总内存的百分比。

-XX:MaxDirectMemorySize 

在引发 时运行指定的命令。

-XX:MaxHeapSize 

指定对象内存分配池的最大大小。

-XX:MaxRAMPercentage 

将 Java 堆的最大大小设置为占总内存的百分比。

-XX:OnOutOfMemoryError 

在引发 时运行指定的命令。

-XX:ParallelCMSThreads 

配置 GC 突变器后台线程的数量。

-XX:ParallelGCThreads 

配置 GC 线程数。

-XX:[+|-]PrintCodeCache 

在应用程序退出时打印代码缓存使用情况。

-XX:[+|-]ShowHiddenFrames 

指定是否在堆栈跟踪中显示生成的隐藏帧。

-XX:[+|-]UseCompressedOops 

禁用 64 位 JVM 中的压缩引用

-XX:[+|-]UseContainerSupport 

当 VM 检测到 Java 堆在容器中运行时,将较大的内存比例设置为 Java 堆。

等效选项

HotSpot Option

OpenJ9 Option

Usage

-Xcomp

-Xnojit 

禁用解释性方法调用

-Xgc

-Xgcpolicy 

配置垃圾回收策略

-XX:+UseNUMA

-Xnuma:none 

控制非一致性内存结构感知

工具

jcmd:使用该工具在指定的 VM 上运行诊断命

jcmd [<options>] [<vmid> <arguments>]

options

Hotspot

OpenJ9

注释

-J

为运行命令的 Java 虚拟机提供参数

-h

打印帮助

-f

×

从文件中读取并执行命令

-l

列出本机jvm进程

OpenJ9特殊的参数

arguments

注释

Dump.heap

创建堆转储文件

Dump.java

创建一个javacore文件

Dump.snap

转储跟踪缓冲区的快照。

Dump.system

创建一个系统转储文件

GC.class_histogram

获取java进程的堆信息

GC.heap_dump

创建堆转储文件

GC.run

运行垃圾收集器

Thread.print

展示线程信息

jstat.class

展示JVM类加载器数据

例如:

$ jcmd -l
3112 openj9.tools.attach.diagnostics.tools.Jcmd -l
3924 com.zhongan.platform.demo.PerformanceClientApplication
$ jcmd 3924 help
Dump.heap
Dump.java
Dump.snap
Dump.system
GC.class_histogram
GC.heap_dump
GC.run
Thread.print
help
jstat.class

jmap:使用该工具获取特定 Java™ 进程的内存信息或进程列表

jmap [<option>] [<vmid>]

options

Hotspot

OpenJ9

注释

-histo

打印有关堆上类的统计信息,包括对象数及其聚合大小

-histo:live

仅打印活动对象的统计信息

-J

为运行命令的 Java 虚拟机提供参数

-dump

×

生成堆转储快照

-finalizerinfo

×

显示在等待Finalizer线程执行finalizer方法的对象

-heap

×

显示Java堆详细信息

-F

×

当-dump没有响应时,强制生成dump快照

例如:

$ jmap -histo:live 17592
 num   object count     total size    class name
-------------------------------------------------
    1          52999        2119960    [C
    2           2953        1559184    [S
    3          12888        1134144    java.lang.reflect.Method
    4          10777        1034592    java.lang.Class
    5          39194         940656    java.util.concurrent.ConcurrentHashMap$Node
    6          55649         890384    java.lang.String
    7           9541         763280    [Ljava.util.HashMap$Node;
    8          16871         674840    java.lang.Class$ReflectRef
    9          18965         606880    java.util.LinkedHashMap$Entry
...

jps:使用该工具查询正在运行的 Java 进程。该工具显示当前主机上当前用户标识拥有的每个 Java 进程的信息。

jps [<options>]

options

Hotspot

OpenJ9

注释

-l

打印应用程序包名称

-q

不显示主类名称、JAR文件名和传递给主方法的参数,只显示本地虚拟机唯一ID。

-m

显示Java虚拟机启动时传递给main()方法的参数。

-v

显示Java虚拟机启动时传递的JVM参数。

-V

×

不显示主类名称、JAR文件名和传递给主方法的参数,只显示本地虚拟机唯一ID。

-J

为运行命令的 Java 虚拟机提供参数

例如:

$ jps -l
5462  org.foo.bar.MyApplication
14332 openj9.tools.attach.diagnostics.Jps
$ jps -q
5462
14332

jstat:使用该工具获取 Java 虚拟机 (JVM) 统计信息。

jstat [<option>] [<vmid>]

options

Hotspot

OpenJ9

注释

-class

显示类加载统计信息

-compiler

×

HotSpt JIT编译器行为统计

-gc

×

垃圾回收堆的行为统计

-gccapacity

×

各个垃圾回收代容量和他们相应的空间统计

-gcutil

×

垃圾回收统计概述

-gccause

×

垃圾收集统计概述,附加最近两次垃圾回收事件的原因

-gcnew

×

新生代行为统计

-gcnewcapacity

×

新生代与其相应的内存空间的统计

-gcold

×

年老代和永生代行为统计

-gcoldcapacity

×

年老代行为统计

-gcpermcapacity

×

永生代行为统计

例如

$ jstat -class 17592
Class Loaded    Class Unloaded
       10800                 4

jstack:使用该工具获取进程的 Java 堆栈跟踪和线程信息。

jstack <options>* <pid>*

options

Hotspot

OpenJ9

注释

-F

×

当正常输出请求不被响应时,强制输出线程堆栈

-l

打印更详细的输出,包括有关锁的信息

-m

×

如果调用到本地方法的话,可以显示C/C++的堆栈

-p

×

打印进程的系统和代理属性

-h

打印帮助信息

-J

×

为运行命令的 Java 虚拟机提供参数

例如

$ jstack -p 17592
2023-02-28T10:58:08.875
Virtual machine: 17592 JVM information:
JRE 1.8.0 Windows 10 amd64-64-Bit Compressed References 20230207_599 (JIT enabled, AOT enabled)
OpenJ9   - e68fb241f
OMR      - f491bbf6f
JCL      - eebde685ec based on jdk8u362-b09

"JIT Compilation Thread-000" Id=4 RUNNABLE

"JIT Compilation Thread-001" Id=5 RUNNABLE

"JIT Compilation Thread-002 Suspended" Id=6 RUNNABLE

"JIT Compilation Thread-003 Suspended" Id=7 RUNNABLE

"JIT Compilation Thread-004 Suspended" Id=8 RUNNABLE

"JIT Compilation Thread-005 Suspended" Id=9 RUNNABLE

"JIT Compilation Thread-006 Suspended" Id=10 RUNNABLE

"JIT Diagnostic Compilation Thread-007 Suspended" Id=11 RUNNABLE

"JIT-SamplerThread" Id=12 TIMED_WAITING

"IProfiler" Id=13 RUNNABLE

"RMI TCP Accept-0" Id=3 RUNNABLE
        at java.net.DualStackPlainSocketImpl.accept0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketAccept(DualStackPlainSocketImpl.java:131)
        at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:199)
        - locked java.net.SocksSocketImpl@bd454f07
        at java.net.ServerSocket.implAccept(ServerSocket.java:560)
        at java.net.ServerSocket.accept(ServerSocket.java:528)
        at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:52)
        at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:405)
        at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:377)
        at java.lang.Thread.run(Thread.java:826)

"Finalizer thread" Id=14 RUNNABLE
...
java.vm.name=Eclipse OpenJ9 VM
com.ibm.oti.shared.enabled=false
com.ibm.vm.bitmode=64
file.encoding=UTF-8
csp.sentinel.charset=UTF-8
csp.sentinel.flow.cold.factor=3
com.ibm.oti.configuration=scar
java.specification.version=1.8
intellij.debug.agent=true

Agent properties:
com.sun.management.jmxremote.localConnectorAddress=service:jmx:rmi://127.0.0.1/stub/rO0ABXN9AAAAAQAlamF2YXgubWFuYWdlbWVudC5yZW1vdGUucm1pLlJNSVNlcnZlcnhy
ABdqYXZhLmxhbmcucmVmbGVjdC5Qcm94eeEn2iDMEEPLAgABTAABaHQAJUxqYXZhL2xhbmcvcmVmbGVjdC9JbnZvY2F0aW9uSGFuZGxlcjt4cHNyAC1qYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN0
SW52b2NhdGlvbkhhbmRsZXIAAAAAAAAAAgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc5AAtVbmljYXN0UmVmMgAADjE5Mi4xNjguNDQuMTA3AADE1JTwWTD2
VXzjOmidUwAAAYaVxf50gAEAeA==
sun.java.command=com.zhongan.platform.demo.PerformanceClientApplication

arthas

openj9默认策略gencon可以使用arthas。

openj9启用balanced策略时使用arthas有bug。

 类似资料: