Solaris上的StackOverflowError但Linux/Windows上没有

alv*_*ves 1 java xml xerces

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

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

alv*_*ves 5

根据此页面,默认堆栈大小取决于操作系统.

Sparc: 512

Solaris x86: 320(在5.0及更早版本中是256之前)(更新:根据此页面,主线程堆栈的大小来自ulimit.主线程堆栈由vm人为地减少到-Xss值)

Sparc 64位: 1024

Linux amd64: 1024(在5.0及更早版本中为0)(更新:默认大小来自ulimit,但我可以用-Xss减少)

Windows: 256(也在这里)

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

java ... -Xss1024k ... <classname>
Run Code Online (Sandbox Code Playgroud)

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