我习惯于看到如下所示的
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)
现在,在协助其他用户使用我的软件时,我偶尔会遇到另一种形式的线程转储,如下所示:
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[],java.lang.class) @bci=39,line=69 (Compiled frame) - sun.reflect.annotation.AnnotationParser.parseAnnotations(byte[],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)
正如你所看到的,格式是完全不同的,而且是次等的.它不会报告它所持有的锁,也不会报告它正在等待的对象.
有谁知道什么样的JavaVM系列产生第二种堆栈跟踪样式?我自己从未使用过,这一直困扰着我!
解决方法
这是使用-F选项运行时jstack(在Oracle JDK中)的输出.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。