问题
从命令行运行 ArcGIS Engine Java 应用程序时,会出现此问题。 以下是控制台的输出示例:
发生了不可恢复的堆栈溢出。 # # HotSpot 虚拟机 检测到异常错误: # # EXCEPTION_STACK_OVERFLOW (0xc00000fd) at pc=0x7227f575, pid=5488, tid=4648 # # Java VM: Java HotSpot(TM) Client VM (1.8.0_65-b17 mixed mode, sharing) # 问题框架: # .... # # 将包含更多信息的错误报告文件 另存为 hs_err_pidXXXX.log # # 如果您想向 Oracle 提交错误报告, 请访问: # http://bugreport.java.com/bugreport/crash.jsp #
正在执行的 Java 线程在执行期间耗尽了堆栈空间,从而导致 Java 虚拟内存 (JVM) 终止并且应用程序崩溃。 这是由于默认的堆栈大小仅为每个线程 256KB。
注意: 有关 Windows 和 UNIX 平台上 Java 中线程堆栈大小的详细讨论,请参考以下文章:Oracle Technology Network Bug Detail。此问题有三种可能的解决方案:
java -jar -Xss4m -client samplename.jar
注意: 如果在 Linux 上,请不要忘记从安装位置 (%AGSDEVKITJAVA%) 获取 init_java.sh 或 init_java.csh,具体取决于用户外壳程序。在 Java 5 中,此 JVM 选项仅增加辅助线程的堆栈大小,而不增加主线程的堆栈大小。 因此,有问题的 ArcObjects 操作必须在辅助线程上执行。 在 Java 6 及更高版本中,此选项甚至可以修改主线程的堆栈大小。 因此,可以在主线程本身上执行 ArcObjects 操作。
注意: 请记住,ArcObjects 将始终在单线程环境中运行。 因此,如果选择了 JVM 选项,并且将应用程序初始化为以引擎模式运行 (EngineInitialize.initializeEngine()),则所有 ArcObject 的工作(包括但不限于:互操作初始化和有问题的操作)都必须严格在辅助线程上执行。
EditBin.exe <path_to_java_exe> <stack_size_in_bytes>例如,使用以下命令将堆栈大小增加到 2Mb:
EditBin.exe "c:\jdk1.5.0_06\jre\bin\java.exe" 2097152
获取来自 ArcGIS 专家的帮助
下载 Esri 支持应用程序