我有一个Java应用程序,该应用程序使用Xerces解析大型xml模式(.xsd),在Linux和Windows上运行良好,但在Solaris上给出了StackOverflowError,具有完全相同的输入和配置。我知道Xerces使用递归来验证xml模式,但是由于它在Windows和Linux上没有出现任何问题,因此我非常有信心它可以在任何地方运行。

为什么会这样?有解决方法吗?

最佳答案

根据this page,默认堆栈大小取决于操作系统。

Sparc:512

Solaris x86:320(在5.0和更早版本中为256)(更新:根据this page,主线程堆栈的大小来自ulimit。vm将主线程堆栈人为地减少为-Xss值)

Sparc 64位:1024

Linux amd64:1024(在5.0及更低版本中为0)(更新:默认大小来自ulimit,但可以使用-Xss进行缩小)

Windows:256(也是here

您可以使用-Xss标志更改默认设置。例如:

java ... -Xss1024k ... <classname>


将默认堆栈大小设置为1Mb。

关于java - Solaris上的StackOverflowError,但Linux/Windows上没有,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/887935/

10-09 05:13