Problem: ArcGIS Engine Java application throws “EXCEPTION_STACK_OVERFLOW"

文章编号 : 32426
软件: ArcGIS Engine Runtime 9.1, 9.2, 9.3, 9.3.1
操作系统: N/A
已邀请:

EsriSupport

赞同来自:

错误信息:
这个问题是当一个ArcGIS Engine的Java应用程序运行在Windows操作系统上发生的。 Java线程执行用完堆栈空间,造成的Java虚拟内存(??JVM)的终止和应用程序崩溃。
以下是控制台上的异常日志: "An unrecoverable stack overflow has occurred. # # An unexpected error has been detected by HotSpot Virtual Machine: # # EXCEPTION_STACK_OVERFLOW (0xc00000fd) at pc=0x7227f575, pid=5488, tid=4648 # # Java VM: Java HotSpot(TM) Client VM (1.5.0_08- b03 mixed mode, sharing) # Problematic frame: # .... # # An error report file with more information is saved as hs_err_pidXXXX.log # # If you would like to submit a bug report, please visit: # http://java.sun.com/webapps/bugreport/crash.jsp #"
原因: 在Windows上运行的Java应用程序获取一个每线程256KB的默认堆栈大小。 JVM的支持命令行选项,- XSS <size> ,即可以改变一个线程的默认堆栈大小。然而,在Windows上使用Java 5,此命令行选项只影响从主线程内创建的线程(反对Solaris和Linux这个选项影响主线程也)的堆栈大小。在Windows中,主线程的堆栈大小配置到可执行文件(java.exe / javaw.exe)。
对于在Windows和UNIX平台上的Java线程堆栈大小的详细讨论,请参阅以下链接:

http://bugs.sun.com/bugdatabas ... 689767" rel="nofollow" target="_blank">Sun Developer Network Bug Detail.

解决方法:
1)更改JVM参数,-Xss<size>,增加线程堆栈大小(约为2M) 在JAVA 5中,JVM参数只能更改次级线程的堆栈大小,而不能更改主线程,加之,ArcObjects必须运行在一个单独的线程中,因此这主导致ArcObjects操作必须在一个次级线程中。 在JAVA 6中,可以在配置文档中修改主线程的堆栈大小,因此ArcObjects操作也被允许在主线程中进行。
2)使用微软的“EditBin”工具:EditBin是一个能用于修改所有线程堆栈大小的工具,是visual Studio平台的一部分。 3)使用Esri的“EditBin”工具:如果没法找到微软的“EditBin”工具,可以使用Esri的“EditBin”工具 http://downloads2.esri.com/support/TechArticles/Editbin.zip ,下载这个文件并解压,打开命令行,并导航到解压目录,用如下命令增加java.exe的堆栈大小: EditBin.exe <path_to_java_exe> <stack_size_in_bytes> 例如:下面的命令是将堆栈值增加到2MB EditBin.exe "c:\jdk1.5.0_06\jre\bin\java.exe" 2097152



创建时间:2007-08-01
最近更新: 2010-06-17


原文链接
http://support.esrichina.com.c ... .html

要回复问题请先登录注册