Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要用java编写一个大型excel_Java_Excel_Memory_Garbage Collection_Overhead - Fatal编程技术网

需要用java编写一个大型excel

需要用java编写一个大型excel,java,excel,memory,garbage-collection,overhead,Java,Excel,Memory,Garbage Collection,Overhead,我需要用java编写一个大型excel文件。我需要在同一个excel中包含四种不同类型的数据,因为我需要将excel交给客户,制作四种不同的excel不适合我。 所以我准备了4张不同的表格,每一张都是一种类型的数据。现在,我从数据库中获取的数据要大得多,很容易超过每页1048576行的限制。所以我也处理了溢出部分。现在我正在测试这个文件创建的最大阈值,即准备4个表,所有表都有1048576行,我得到了java堆异常,我将内存从256mb增加到2gb,我得到了新的错误,即“超出了GC开销限制”。我

我需要用java编写一个大型excel文件。我需要在同一个excel中包含四种不同类型的数据,因为我需要将excel交给客户,制作四种不同的excel不适合我。 所以我准备了4张不同的表格,每一张都是一种类型的数据。现在,我从数据库中获取的数据要大得多,很容易超过每页1048576行的限制。所以我也处理了溢出部分。现在我正在测试这个文件创建的最大阈值,即准备4个表,所有表都有1048576行,我得到了java堆异常,我将内存从256mb增加到2gb,我得到了新的错误,即“超出了GC开销限制”。我进一步将内存增加到10GB,但得到了相同的错误。我同意我正在创建许多对象,例如row.createCell(),每次都是为了创建excel的单元格。下面是我通过free-g检查内存配置时得到的输出:

Memort类型缓存的可用共享缓冲区总数
成员:31228017
-/+缓冲区/高速缓存:4 27
交换:0

完全不知道下一步该怎么办。我想CSV文件不是我的选择。
任何线索都将受到衷心感谢

可能有助于在运行时收集一些垃圾(手动)并共享一些代码。如何将数据拆分为多个工作表,然后使用Excel将其合并假设您使用的是Apache POI,您应该注意,否则,处理xlsx时疯狂的内存消耗是一个众所周知的问题。我找到了解决方案。你可能想知道。事实上,在每一堂课上,我都会打开excel,写下它,然后再关闭它。所以我可以写第一张纸,不管有多长。但当我在关闭文件后,下一个工作表编写器无法加载那个大文件。现在,代码只打开一次文件,只有在所有工作表准备就绪时才关闭。另外,我使用的是SXSSFWorkbook,而且它也很节省内存,所以谢天谢地,我的问题解决了:)可能有助于在运行时收集一些垃圾(手动)并共享一些代码。如何将数据拆分为多个工作表,然后使用Excel将其合并?假设您使用的是Apache POI,您应该注意,处理xlsx时疯狂的内存消耗是一个众所周知的问题。我找到了解决方案。你可能想知道。事实上,在每一堂课上,我都会打开excel,写下它,然后再关闭它。所以我可以写第一张纸,不管有多长。但当我在关闭文件后,下一个工作表编写器无法加载那个大文件。现在,代码只打开一次文件,只有在所有工作表准备就绪时才关闭。另外,我使用的是SXSSFWorkbook,而且它的内存效率也很高,所以谢天谢地,我的问题解决了:)