java.lang.InternalError:名称太长,无法表示

2022-09-02 10:51:04

我收到此错误:

java.lang.InternalError: name is too long to represent
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:338)
        at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:291)
        at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:259)

这似乎与一些调试功能有关(实际上删除命令行选项时,错误会消失)。我还在ASF Bugzilla中找到了一些信息。有没有办法解决这个问题?-Xdebug

我能想到的可能的解决方案是更改JVM(使用JRockit,这应该不会有这个问题),但我真的不知道这是否可以解决问题,以及它是否可以破坏其他东西。


答案 1

更新下面原始答案中提到的错误现已关闭!


如您引用的文章中所述,这是 Sun/Oracle JVM 实现中的一个错误。在撰写本文时,它尚未解决。

我可以想出三种方法来解决这个问题:

  1. 根本不生成SMAP文件(例如:不要使用-Xdebug运行或使用类似抑制Smap的设置)
  2. 尝试确保调试信息的大小很小(例如:减小代码的大小)
  3. 使用不同的虚拟机实现。

答案 2

对我有用的一个解决方法是在中添加以下条目:tomcat/conf/web.xml

<init-param> 
   <param-name>suppressSmap</param-name> 
   <param-value>true</param-value> 
</init-param>

推荐