2011-11-21 131 views
20

我得到这个错误:java.lang.InternalError:名字太长代表

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) 

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

我能想到的可能的解决方案是更改JVM(使用JRockit应该不存在此问题),但我不知道这是否可以解决问题,以及是否可以解决其他问题。

+2

如果它是一个已知的bug,我们解决不了它的。切换JVM一般工作正常,当然你必须对另一个JVM进行测试。 – home

+2

你可以阅读最后一篇文章:https://forums.oracle.com/forums/thread.jspa?threadID = 943287 –

+0

看起来好像该错误在Sun的跟踪器中没有解决状态,而且它也具有低优先级。我认为在更近期的JVM中它不会更好。自2005年以来一直开放,看起来他们只是不关心它。 –

回答

10

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


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

我能想到的三种方式来解决这个问题:

  1. 不生成SMAP文件在所有(如:不-Xdebug运行或使用suppressSmap样设置)
  2. 尽量确保调试信息的大小很小(例如:减小代码的大小)
  3. 使用不同的虚拟机实现。
+0

感谢您的回答,只有两点:您是否确认版本5和6 Sun JVM中存在该错误? (请注意,Oracle JRockit VM不应该有这个问题)。你能否详细说一下“suppressSmap-like”? – Paolo

+0

+1,我会接受这个答案,如果我提问的细节将被提供。 – Paolo

+0

我没有亲自复制Sun/Oracle 5和6上的错误,但我链接的错误报告仍未解决。这与报告中正在进行的评论相结合,很好地表明该错误仍然存​​在。至于类似SuppressSmap的设置:一些实现通过提供自定义设置来防止调试数据被创建,从而解决了这个错误。例如,请参阅http://tomcat.apache.org/tomcat-6.0-doc/jasper-howto.html上的“已知问题”部分。 – Guus

1

如果您可以确定导致问题的类,则应该能够使用Stripper从该类中移除调试扩展信息,并仍然能够调试其余类。

2

一个解决的是为我工作在tomcat/conf/web.xml添加以下条目:

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

我面对完全一样的错误。只有当我以调试模式启动Tomcat时,以及某个JSP文件(大尺寸)时才会报告此错误。当我以正常模式启动Tomcat(不使用Debug)时,错误被清除。随着时间的推移,JSP文件的大小不断增加,最近开始显示此错误。

我能够解决此错误的唯一方法是将Tomcat从版本5.5升级到版本7.0,并将JRE升级到jdk1.7。

查看下面的快照以帮助您获得照片。

enter image description here

而且,不要忘记添加为Tomcat 7和新的JRE所需的必要库。

最初,更新文件web.xml包括以下部分将解决这个问题,但最近不再工作:

<init-param> 
      <param-name>mappedfile</param-name> 
      <param-value>false</param-value> 
    </init-param>