Java xml转换上的堆栈溢出异常

Java xml转换上的堆栈溢出异常,java,xml,xslt,stack-overflow,Java,Xml,Xslt,Stack Overflow,我在sun solaris中托管的weblogic server 10g中的xml转换中遇到以下java stackoverflow错误。这只会发生在特定的xml转换中,rest所有xml转换都可以正常工作。使用的xsl文件也不是很大 我正在使用rt.jar中提供的转换api,但是从xalan apache包(com.sun.org.apache.xalan.internal.xsltc.dom.SimpleResultTreeImpl)中得到了这个错误,而我的应用程序中还没有打包这个包。 另一

我在sun solaris中托管的weblogic server 10g中的xml转换中遇到以下java stackoverflow错误。这只会发生在特定的xml转换中,rest所有xml转换都可以正常工作。使用的xsl文件也不是很大

我正在使用rt.jar中提供的转换api,但是从xalan apache包(
com.sun.org.apache.xalan.internal.xsltc.dom.SimpleResultTreeImpl
)中得到了这个错误,而我的应用程序中还没有打包这个包。 另一件有趣的事情是,当我在windows机器上托管的weblogic 10g服务器上运行应用程序时,我没有得到这个异常,我只在sun solaris中得到这个异常

有人能告诉我为什么我会犯这个错误吗

您能告诉我是哪个jar文件导致了异常吗?weblogic会有一个xalan.jar吗?如果是这样,我可以尝试升级jar文件,看看它是否正常工作

Caused by: java.lang.StackOverflowError
    at com.sun.org.apache.xalan.internal.xsltc.dom.SimpleResultTreeImpl.characters(SimpleResultTreeImpl.java)
    at com.sun.org.apache.xalan.internal.xsltc.dom.SimpleResultTreeImpl.copy(SimpleResultTreeImpl.java:438)
    at com.sun.org.apache.xalan.internal.xsltc.runtime.BasisLibrary.copy(BasisLibrary.java:1317)
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()

根据对
GregorSamsa.replace()
的所有调用,这里似乎发生了一些递归。它在Windows而不是Solaris上工作的事实可能是由于JVM的不同实现,或者更可能是由于堆栈大小的默认JVM选项

以下是JVM的功能

这是你能做到的

下面是如何通过命令行以及有关此主题的更多讨论:

$ javac TT.java
$ java -Xss4m TT
-Xss4m=4兆欧
-Xss1024k=1024kb

如果您想从应用程序中启动一个新线程,并且只为该线程指定堆栈大小,请查看以下内容:

public Thread(ThreadGroup group, Runnable target,String name,long stackSize)

没有XSL和示例XML,任何人都很难提供帮助。罪魁祸首看起来像是class
GregorSamsa
。GregorSamsa已经变成了一个bug!?执行应该是相同的,因此如果solaris上的执行不同,可能您的类路径/设置也不同:您是否更新了solaris上的所有其他JAR、配置文件等?检查您的环境是否相互匹配,而不仅仅是包含代码的jar。如果可用RAM太低,可能会发生此错误。Solaris机器的RAM是否小于成功运行转换的机器上的RAM?此外,应该有运行时参数来定义可用的堆栈和堆空间——在两种不同的平台上,默认值可能会非常不同。如果xml是高度嵌套和/或巨大的,我可能会看到堆栈溢出。其次,更可能的是,您在其中一个环境中使用了不正确的jar版本。请注意,这并不意味着最新的罐子。非常感谢你们。将堆栈大小增加到1024k是可行的。但是这种增加会不会对性能产生副作用,因为它会从堆中借用一些内存?