Java 哪个JVM打印出这样的线程转储?

Java 哪个JVM打印出这样的线程转储?,java,thread-dump,Java,Thread Dump,我习惯于看到如下所示的Java线程转储,这是由Sun HotSpot JVM及其衍生物(如OpenJDK)生成的: "main" prio=10 tid=0x00007f4020009000 nid=0x538c in Object.wait() [0x00007f402891f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) -

我习惯于看到如下所示的Java线程转储,这是由Sun HotSpot JVM及其衍生物(如OpenJDK)生成的:

"main" prio=10 tid=0x00007f4020009000 nid=0x538c in Object.wait() [0x00007f402891f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x0000000614ea64e8> (a java.lang.Object)
    at java.lang.Object.wait(Object.java:503)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.join(QueuedThreadPool.java:386)
    - locked <0x0000000614ea64e8> (a java.lang.Object)
    at org.eclipse.jetty.server.Server.join(Server.java:398)
    at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:531)
    at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:364)
    at org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:528)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
“main”prio=10 tid=0x00007f4020009000 nid=0x538c在Object.wait()中[0x00007f402891f000]
java.lang.Thread.State:正在等待(在对象监视器上)
在java.lang.Object.wait(本机方法)
-等待(一个java.lang.Object)
等待(Object.java:503)
位于org.eclipse.jetty.util.thread.QueuedThreadPool.join(QueuedThreadPool.java:386)
-锁定(一个java.lang.Object)
位于org.eclipse.jetty.server.server.join(server.java:398)
位于org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:531)
位于org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:364)
位于org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:528)
位于org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
现在,在帮助其他用户使用我的软件时,我偶尔会遇到另一种形式的线程转储,如下所示:

Thread 9255: (state = BLOCKED)
 - sun.reflect.annotation.AnnotationType.getInstance(java.lang.Class) @bci=0, line=63 (Interpreted frame)
 - sun.reflect.annotation.AnnotationParser.parseAnnotation(java.nio.ByteBuffer, sun.reflect.ConstantPool, java.lang.Class, boolean) @bci=94, line=202 (Interpreted frame)
 - sun.reflect.annotation.AnnotationParser.parseAnnotations2(byte[], sun.reflect.ConstantPool, java.lang.Class) @bci=39, line=69 (Compiled frame)
 - sun.reflect.annotation.AnnotationParser.parseAnnotations(byte[], sun.reflect.ConstantPool, java.lang.Class) @bci=11, line=52 (Compiled frame)
 - java.lang.Class.initAnnotationsIfNecessary() @bci=22, line=3070 (Interpreted frame)
 - java.lang.Class.getAnnotation(java.lang.Class) @bci=13, line=3029 (Interpreted frame)
 - com.google.inject.internal.Annotations.isRetainedAtRuntime(java.lang.Class) @bci=3, line=57 (Interpreted frame)
 - com.google.inject.Key.ensureRetainedAtRuntime(java.lang.Class) @bci=1, line=362 (Interpreted frame)
 - com.google.inject.Key.strategyFor(java.lang.annotation.Annotation) @bci=15, line=339 (Interpreted frame)
 - com.google.inject.Key.get(com.google.inject.TypeLiteral, java.lang.annotation.Annotation) @bci=6, line=274 (Interpreted frame)
 - com.google.inject.assistedinject.FactoryProvider2.assistKey(java.lang.reflect.Method, com.google.inject.Key, com.google.inject.internal.Errors) @bci=14, line=522 (Interpreted frame)
 - com.google.inject.assistedinject.FactoryProvider2.<init>(com.google.inject.Key, com.google.inject.assistedinject.BindingCollector) @bci=306, line=235 (Interpreted frame)
线程9255:(状态=阻塞)
-sun.reflect.annotation.AnnotationType.getInstance(java.lang.Class)@bci=0,line=63(解释帧)
-sun.reflect.annotation.AnnotationParser.parseAnnotation(java.nio.ByteBuffer,sun.reflect.ConstantPool,java.lang.Class,boolean)@bci=94,line=202(解释帧)
-sun.reflect.annotation.AnnotationParser.parseAnnotations2(字节[],sun.reflect.ConstantPool,java.lang.Class)@bci=39,行=69(编译帧)
-sun.reflect.annotation.AnnotationParser.parseAnnotations(字节[],sun.reflect.ConstantPool,java.lang.Class)@bci=11,line=52(编译帧)
-java.lang.Class.InitAnnotationSifEssential()@bci=22,line=3070(解释帧)
-java.lang.Class.getAnnotation(java.lang.Class)@bci=13,line=3029(解释帧)
-com.google.inject.internal.Annotations.isRetainedAtRuntime(java.lang.Class)@bci=3,line=57(解释帧)
-com.google.inject.Key.ensureRetainedAtRuntime(java.lang.Class)@bci=1,line=362(解释帧)
-com.google.inject.Key.strategyFor(java.lang.annotation.annotation)@bci=15,line=339(解释帧)
-com.google.inject.Key.get(com.google.inject.TypeLiteral,java.lang.annotation.annotation)@bci=6,line=274(解释帧)
-com.google.inject.assistedinject.FactoryProvider2.assistKey(java.lang.reflect.Method,com.google.inject.Key,com.google.inject.internal.Errors)@bci=14,line=522(解释帧)
-com.google.inject.assistedinject.FactoryProvider2.(com.google.inject.Key,com.google.inject.assistedinject.BindingCollector)@bci=306,line=235(解释帧)
正如你所看到的,格式是完全不同的,而且是低劣的。它不报告它持有的锁,也不报告它正在等待的对象


有人知道哪些JavaVM家族产生了第二种类型的堆栈跟踪吗?我自己从来没有用过,这已经困扰了我一段时间了

这种类型的线程转储看起来像是
jstack
实用程序在
macosx
下工作的结果。这可能与Mac OS JVM实现的特性有关。

这是使用-F选项运行时jstack(在Oracle JDK中)的输出