我一直在使用我们系统的线程转储来解决各种问题,我注意到的一件事是,无论好坏,我们在线程转储中有很多这样的事情:
"TP-Processor59" - Thread t@915
java.lang.Thread.State: RUNNABLE
at java.lang.Class.getEnclosingMethod0(Native Method)
at java.lang.Class.getEnclosingMethodInfo(Class.java:929)
at java.lang.Class.getEnclosingClass(Class.java:1081)
at java.lang.Class.getSimpleBinaryName(Class.java:1220)
at java.lang.Class.getSimpleName(Class.java:1112)
现在,我们确实对我们的配置系统所依赖的 getSimpleName() 进行了很多调用。但我的问题是为什么他们总是陷入这种特殊的方法?这是一个 Windows JVM,1.6.0_29,64 位。
我觉得 getSimpleName() 通常应该是一个非常快速的调用。这很可能是 getEnclosureMethod0() 在某种程度上非常慢,还是该本机方法可能会以某种方式阻塞某些东西(当然,这不会出现在 JVM 线程转储中)?