我在用poi操作excel文件(8M,不到6万条数据),主要是完成从excel文件导入到sql server 2005库中,在执行到如下代码处public HSSFWorkbook getExcel(InputStream inputStream) {
HSSFWorkbook workBook = null;
if (null != inputStream)
try {
workBook = new HSSFWorkbook(inputStream);
               .......出现
java.lang.OutOfMemoryError: Java heap space
错误.我设置如下也不对JAVA_OPTS="-server -Xms1024m -Xms1024m -XX:PermSize=1024m -XX:MaxNewSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true"
不知道是不是设置错了,如果你看到此贴,麻烦您给予回复,谢谢!我的环境是:myeclipse7 + tomcat6 + jdk1.6 
内存4G,CPU2G
谢谢

解决方案 »

  1.   

    在tomcat6 的启动文件中设置JAVA_OPTS,然后在操作的时候用jstat跟踪一下内存变化。逐步优化程序,尽量少的new对象。
      

  2.   

    你的参数是加在哪里的??
    如果是用eclipse启动tomcat,在preference->myeclipse->applicationserver->tomcat的jdk optionnal javaVm
    下加上-Xms256m -Xmx512m如果直接通过脚本启动的tomcat,只需要在启动脚本里加上内存参数就可以了
      

  3.   

    java.lang.OutOfMemoryError: Java heap space 
    你最好看看stacktrace,或者贴出来,
    因为要判断一下是因为死循环导致的内存溢出还是内存不足导致的内存溢出。代码能给的再全一点吗?
      

  4.   

    这个问题我也遇到过,重启tomcat就ok了
      

  5.   

    java.lang.OutOfMemoryError: Java heap space 解决方法 
    这个问题的根源是jvm虚拟机的默认Heap大小是64M,可以通过设置其最大和最小值来实现.设置的方法主要是几个.
    1.可以在windows 更改系统环境变量
    加上JAVA_OPTS=-Xms64m -Xmx512m
    2,如果用的tomcat,在windows下,可以在
    C:\tomcat5.5.9\bin\catalina.bat  中加上:
    set JAVA_OPTS=-Xms64m -Xmx256m
    位置在: rem Guess CATALINA_HOME if not defined  这行的下面加合适.
    3.如果是linux系统
    Linux  在{tomcat_home}/bin/catalina.sh的前面,加 
    set JAVA_OPTS='-Xms64 -Xmx512'
      

  6.   

    谢谢大家,我按4楼的作法出现了如下错误,我的支持最大内存java -Xmx1400m错误信息:

    <div class="stacktrace" style="padding-left: 2em">
        <strong>java.lang.OutOfMemoryError: Java heap space</strong>
        <div>
        <pre>
        org.apache.poi.hssf.usermodel.HSSFRow.createCellFromRecord(HSSFRow.java:190)
        org.apache.poi.hssf.usermodel.HSSFSheet.setPropertiesFromSheet(HSSFSheet.java:166)
        org.apache.poi.hssf.usermodel.HSSFSheet.<init>(HSSFSheet.java:120)
        org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:224)
        org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:153)
        tms.Utils.poiExcel.getExcel(poiExcel.java:240)
        tms.mvc.actions.customer.ImportactionAction.findExcelColumnsHeader(ImportactionAction.java:362)
        tms.mvc.actions.customer.ImportactionAction.uploadFileColumns(ImportactionAction.java:329)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        java.lang.reflect.Method.invoke(Method.java:597)
        com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
        com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279
    )
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
        com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor
    .java:163)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java
    :87)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
        com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249
    )
        org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor
    .java:68)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java
    :87)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
        com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor
    .java:122)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
        com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java
    :195)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java
    :87)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
        com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java
    :195)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java
    :87)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
        com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor
    .java:148)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
        </pre>
        </div>
    </div>
    </div>
    错误代码:
     tms.Utils.poiExcel.getExcel(poiExcel.java:240)
    /**
     * @param dataFilePath
     *            ,
     * @see getExcel(String dataFilePath),dataFilePath = "C:\\excel.xls"
     * @return Workbook,返回整个Workbook数据
     */
    public HSSFWorkbook getExcel(String dataFilePath) {
    HSSFWorkbook workBook = null;
    try {
    POIFSFileSystem inputStream = new POIFSFileSystem(
    new FileInputStream(dataFilePath));
    if (null != inputStream) {
    //--
    workBook = new HSSFWorkbook(inputStream);
    this.setExecuteStatusInfo(true, "");
    } else {
    this.setExecuteStatusInfo(false, this.getErrorInfo());
    }
    } catch (Exception err) {
    setExecuteStatusInfo(false, "数据文件为空,没有任何数据");
    Logger.error(this.getClass(), err.toString());
    }
    return workBook;
    }
      

  7.   

    文件可不小,非要用poi吗,如果是windows运行环境,可以用oledb啊。如果不是非要用程序导入,可以用sqlserver的导入/导出工具。
      

  8.   

    设置tomcat里面有一个参数的,我设置过
      

  9.   

    内存溢出了,以前也遇到过,试着优化自己的程序,之后是该jre的启动设置,1024应该就可以了
      

  10.   

    代码问题应该不存在,因为我什么都没写,只写了获取excel的数据;
    这个只能从程序中操作,不会使用直接的导入/导出操作;
    应该是设置服务器,但我一直没有设置对,不知道为什么...
    按理说,8楼的写法应该是正确的,但我这里还是一样有错误...不知道是不是我的环境有问题:tomcat 6 + myeclipse 7 + jdk 1.6应该没问题吧...