相关疑难解决方法(0)

处理"java.lang.OutOfMemoryError:PermGen space"错误

最近我在我的Web应用程序中遇到了这个错误:

java.lang.OutOfMemoryError:PermGen空间

这是在Tomcat 6和JDK 1.6上运行的典型Hibernate/JPA + IceFaces/JSF应用程序.显然,重新部署应用程序几次后就会发生这种情况.

导致它的原因以及可以采取哪些措施来避免它?我该如何解决这个问题?

memory-leaks exception out-of-memory permgen java-6

1215
推荐指数
17
解决办法
102万
查看次数

如何使用Apache POI加载大型xlsx文件?

我有一个大的.xlsx文件(141 MB,包含293413行,每行62列)我需要在其中执行一些操作.

我在加载此文件(OutOfMemoryError)时遇到问题,因为POI在XSSF(xlsx)工作簿上占用大量内存.

这个问题类似,提出的解决方案是增加VM的分配/最大内存.

它似乎适用于那种文件大小(9MB),但对我来说,即使分配所有可用的系统内存,它也只是不起作用.(嗯,考虑到文件大于15倍,这并不奇怪)

我想知道是否有任何方法以不占用所有内存的方式加载工作簿,但是,没有基于(进入)XSSF的底层XML进行处理.(换句话说,维护清教徒POI解决方案)

如果没有强硬的话,欢迎你说("没有."),并指出了解决"XML"问题的方法.

java memory out-of-memory apache-poi xssf

41
推荐指数
5
解决办法
8万
查看次数

处理大型xlsx文件

我需要自动适应大(30k +行)xlsx文件中的所有行.

以下代码通过apache poi适用于小文件,但适用于大文件OutOfMemoryError:

Workbook workbook = WorkbookFactory.create(inputStream);
Sheet sheet = workbook.getSheetAt(0);

for (Row row : sheet) {
    row.setHeight((short) -1);
}

workbook.write(outputStream);
Run Code Online (Sandbox Code Playgroud)

更新:不幸的是,增加堆大小不是一个选项 - OutOfMemoryError出现在-Xmx1024m和30k行不是一个上限.

java out-of-memory xlsx apache-poi xssf

36
推荐指数
2
解决办法
9万
查看次数

java.lang.OutOfMemoryError:100000条记录的Java堆空间

尝试使用以下代码编写excel文件

public static void main(String[] args) 
    {
          XSSFWorkbook workbook = new XSSFWorkbook(); 

            XSSFSheet sheet = workbook.createSheet("Book Data");

            Map<String, Object[]> data = new TreeMap<String, Object[]>();
            data.put("1", new Object[] {"ID", "NAME", "LASTNAME"});
            for(int i=2;i<100000;i++)
            {               
                data.put(String.valueOf(i), new Object[] {i, "Name"+i, "LastName"+i});
            }

            Set<String> keyset = data.keySet();
            int rownum = 0;
            for (String key : keyset)
            {
                Row row = sheet.createRow(rownum++);
                Object [] objArr = data.get(key);
                int cellnum = 0;
                for (Object obj : objArr)
                {
                   Cell cell = row.createCell(cellnum++);
                   if(obj instanceof String) …
Run Code Online (Sandbox Code Playgroud)

java heap-memory jvm-arguments apache-poi

2
推荐指数
1
解决办法
6332
查看次数

java.lang.OutOfMemoryError:大型Excel文件的Java堆空间

我正在使用Apache POI来读取excel文件.我的文件大约是100MB,我在加载工作簿时得到了这个java.lang.OutOfMemoryError:Java堆

XSSFWorkbook workbook = new XSSFWorkbook(excelFilePath);
Run Code Online (Sandbox Code Playgroud)

我的计算机内存是8GB,所以它不能使用-Xmx太大.所以我的问题是如何处理这个错误?

编辑

我的数据样本(我的数据大约是1087490行):

在此输入图像描述

java apache-poi

2
推荐指数
1
解决办法
1310
查看次数