【问题标题】:OutOfMemoryError: Java heap space to upload 8 MB size fileOutOfMemoryError:Java 堆空间上传 8 MB 大小的文件
【发布时间】:2015-06-26 09:08:26
【问题描述】:

我正在使用 Grails 2.4.4 并尝试使用“apache poi”插件上传 .xlsx 文件,但是当文件大小约为 8 MB 时,我收到 JAVA 堆大小异常。

我的控制器有以下动作和方法:-

def uploadForm() {       
       String fileName = "D:\\File.xlsx"
       Map excelSheetMap = process(fileName)
}

Map process(String fileName) {
    ExcelBuilder excelBuilder = new ExcelBuilder(fileName)  
    //Getting JAVA Heap Size exception here when I am trying to create an object 
    //of ExcelBuilder with the file      
}

ExcelBuilder.groovy 类文件看起来像这样

class ExcelBuilder {
   Workbook workbook
   ExcelBuilder(String fileName) {      
      new File(fileName).withInputStream { is ->
         workbook = new XSSFWorkbook(is)
      }
   }
}

我也尝试过使用 grails-excel-import 插件,但我遇到了同样的异常。

有人可以建议如何在 grails 中导入大尺寸的 excel 文件。提前致谢。

【问题讨论】:

  • 您是否尝试过增加应用程序内存?例如。 run : [maxMemory: 1280, minMemory: 128, debug: false, maxPerm: 256, forkReserve: true, jvmArgs: jvmArgs] 在你的 BuildConfig 中?
  • 是的,我已经尝试过了,但还是一样。
  • 如果你创建一个小项目(grails-less),可能是 groovy 脚本,只测试文件的加载,它会工作吗?
  • 您是否尝试过使用jmcjvisualvm 来查看内存的去向?
  • 如果你用-XX:+HeapDumpOnOutOfMemoryError运行你的jvm,你可以在事后分析堆转储。

标签: grails groovy out-of-memory apache-poi


【解决方案1】:

Poi 确实有很高的内存占用。请参见: http://poi.apache.org/spreadsheet/index.html

你可以试试 SXSSF。 SXSSF 是 XSSF 的 API 兼容的流式扩展,可在必须生成非常大的电子表格且堆空间有限时使用。

【讨论】:

    【解决方案2】:

    这个“XSSF API”的问题是,当我为 Excel 工作表创建根对象(工作簿)时,在生成对象时堆空间已满,并且没有用于构建工作簿对象的堆空间。所以增加堆大小后处理工作表的可能性较小,因为excel工作表可以更大。

    new File(fileName).withInputStream { is ->
             workbook = new XSSFWorkbook(is)
             //Getting JAVA Heap Size exception here when I am trying to create  an object 
          }
    

    所以经过一些研发后,我发现了另外一种 API 来处理大型 Excel 表,即“XSSF 和 SAX(事件 API)”。但为此,您可以获取底层 XML 数据,并自行处理。

    您可以在此处找到完整的文档- https://poi.apache.org/spreadsheet/how-to.html

    谢谢

    【讨论】:

    猜你喜欢
    • 2013-01-24
    • 2019-03-06
    • 2015-08-25
    • 2021-02-13
    • 2012-10-09
    • 2021-09-29
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多