我有一个Java应用程序,它使用在Linux和Windows上运行良好的Xerces解析大型xml架构(.xsd),但在Solaris上提供StackOverflowError,具有完全相同的输入和配置.我知道Xerces使用递归来验证xml架构,但由于它在Windows和Linux上没有出现任何问题,我非常有信心它可以在任何地方运行.
为什么会这样?有解决方法吗?
根据此页面,默认堆栈大小取决于操作系统.
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 ...
将默认堆栈大小设置为1Mb.