首页 / JAVA / 超出堆内存,java
超出堆内存,java
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了超出堆内存,java,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2694字,纯文字阅读大概需要4分钟。
内容图文
![超出堆内存,java](/upload/InfoBanner/zyjiaocheng/955/449cf658e7b142038084121b42e0cd75.jpg)
我是java的新手.我只是想了解如何处理堆内存溢出及其原因.有人可以帮我下面的代码为什么它会抛出这个错误.我怎么能避免它.
错误:
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2361) at
java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:117)
at
java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:406)
at java.lang.StringBuffer.append(StringBuffer.java:237) at
com.ugam.qa.tittle.XlsxToCsv.xlsx(XlsxToCsv.java:49) at
com.ugam.qa.tittle.XlsxToCsv.main(XlsxToCsv.java:77)
package com.ugam.qa.tittle;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class XlsxToCsv {
static void xlsx(File inputFile, File outputFile) {
// For storing data into CSV files
StringBuffer data = new StringBuffer();
try {
FileOutputStream fos = new FileOutputStream(outputFile);
// Get the workbook object for XLSX file
XSSFWorkbook wBook = new XSSFWorkbook(new FileInputStream(inputFile));
// Get first sheet from the workbook
XSSFSheet sheet = wBook.getSheetAt(0);
Row row;
Cell cell;
// Iterate through each rows from first sheet
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
row = rowIterator.next();
{
// For each row, iterate through each columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
cell = cellIterator.next();
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
data.append(cell.getBooleanCellValue() + ",");
break;
case Cell.CELL_TYPE_NUMERIC:
data.append(cell.getNumericCellValue() + ",");
break;
case Cell.CELL_TYPE_STRING:
data.append(cell.getStringCellValue() + ",");
break;
case Cell.CELL_TYPE_BLANK:
data.append("" + ",");
break;
default:
data.append(cell + ",");
}
data.append("\r\n");
}}
}
fos.write(data.toString().getBytes());
fos.close();
} catch (Exception ioe) {
ioe.printStackTrace();
}
}
//testing the application
public static void main(String[] args) {
//reading file from desktop
File inputFile = new File("D:\\files\\listing\\test.xlsx");
//writing excel data to csv
File outputFile = new File("D:\\files\\listing\\test1.csv");
xlsx(inputFile, outputFile);
}
}
解决方法:
增加堆是一种解决方案:java -Xmx< MegaBytes> M< YourClass>
更好的解决方案是使用更少的内存,这在您的情况下很容易:为什么要在将整个输出存储到流中之前将其存储在StringBuffer中?在找到它们时,将每个部分直接写入流将会更加节省内存.
对代码的另一个改进是使用FileWriter而不是FileOutputStream:它允许您控制输出编码,并直接接受字符串,而无需调用String#getBytes().
内容总结
以上是互联网集市为您收集整理的超出堆内存,java全部内容,希望文章能够帮你解决超出堆内存,java所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。