故障转储字符串中的 L 和 IL 是什么意思?

What does L and IL mean in the crash dump string?

在处理故障转储时,我遇到了以下行

j  java.awt.EventDispatchThread.pumpEventsForFilter(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V+35

我有几个问题很想知道。

IL和L在字符串中代表什么ILjava/awt/Conditional;Ljava/awt/EventFilter;

字符串末尾的V+35是什么?

Oracle 关于 fatal error log 的文档在回答您的问题时非常肤浅。

看起来 至少对您的故障转储中的 +35 位进行了详尽的解释。根据那个答案,这是给你生成的字节码中的偏移量。

ILL 仍然是个谜。

这些是方法签名中的类型字符串。

(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V

I表示int

Ljava/awt/Conditional;表示java.awt.Conditional

Ljava/awt/EventFilter;表示java.awt.EventFilter

V表示void

所以调用栈上的方法是

  void pumpEventsForFilter(int, Conditional, EventFilter)

此内部类型字符串语法记录在 javadoc for Class.getName() 以及 JVM 规范中。 (相同的语法出现在 Object.toString 生成的字符串中......假设它没有被更人性化的东西覆盖。)

+35是一个字节码偏移量;即指示方法执行在该堆栈框架中的位置。