Java 选项是什么-J-d64“;jmap堆转储实用程序的?
手册上说 如果给定进程在64位VM上运行,则可能需要指定-J-d64选项 就这样。一些堆转储howto包含了它,没有解释Java 选项是什么-J-d64“;jmap堆转储实用程序的?,java,Java,手册上说 如果给定进程在64位VM上运行,则可能需要指定-J-d64选项 就这样。一些堆转储howto包含了它,没有解释 更具体地说,我试图弄清楚,如果不指定该选项,可能会破坏我的堆转储(jhat无法读取它们)。盲目的实验代价高昂,因为堆很大,系统是一个活动的系统,在操作过程中有一些特定的点需要转储。jmap的帮助消息片段: λ > jmap Usage: jmap [option] <pid> (to connect to running proce
更具体地说,我试图弄清楚,如果不指定该选项,可能会破坏我的堆转储(jhat无法读取它们)。盲目的实验代价高昂,因为堆很大,系统是一个活动的系统,在操作过程中有一些特定的点需要转储。jmap的帮助消息片段:
λ > jmap
Usage:
jmap [option] <pid>
(to connect to running process)
jmap [option] <executable <core>
(to connect to a core file)
jmap [option] [server_id@]<remote server IP or hostname>
(to connect to remote debug server)
where <option> is one of:
<none> to print same info as Solaris pmap
-heap to print java heap summary
... stuff ...
-J<flag> to pass <flag> directly to the runtime system
λ > java
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available (implies -server, only for x86_64)
因此
jmap-J-d64
实际上是告诉jmap
启动java-d64
,使用64位模型而不是32位
如果运行jmap
的进程不是64位JVM,请不要传递-J-d64
参数
编辑,因为我做了大量的jmap
/jhat
故障排除
当您说损坏时,您的意思是jhat
实际上报告了损坏的堆转储吗?还是因为堆转储太大而无法读取jhat
将尝试将整个转储加载到内存中,因此您至少需要与转储大小相同的可用内存。您可能需要指定-Xmx
到jhat
,以及J-d64
以增加堆空间
我使用的一个更好的替代方法是,有选择地加载堆转储,而不是预加载所有内容。对于我来说,在6+GB堆转储上的性能要比jhat
好得多