【问题标题】:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space in eclipse线程“主”java.lang.OutOfMemoryError 中的异常:Eclipse 中的 Java 堆空间
【发布时间】:2015-07-29 05:13:08
【问题描述】:

您好,我正在从 .xls 表中读取数据,它包含 8500 行数据,我正在尝试将其存储在 double[][] 中,但出现错误

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

代码

public static double[][] getData_DoubleArray(String path, int sheetNo, int rowIndex1, int rowIndex2) {
    double[][] doubleArray=null;
    try {
        HSSFSheet sheet = PS_ExcelReader.getWorkSheet(path,sheetNo);
        System.out.println("sheet" + sheet);
        List<Object> data1 =  PS_ExcelReader.getFullColumnByIndex(sheet, rowIndex1);

        List<Object> data2 =  PS_ExcelReader.getFullColumnByIndex(sheet, rowIndex2);
        doubleArray = new double[data1.size()][data2.size()];
        for(int i = 0; i < data1.size(); i++) {
            for(int j = 0; j < data2.size(); j++) {
                doubleArray[i][0] = (Double)data1.get(i);
                doubleArray[i][1] = (Double)data2.get(j);
            }               
        }
        System.out.println("array  " + Arrays.deepToString(doubleArray));
    } 
    catch(IOException ioe) {
        log.error("data mis match");    
    }
    return doubleArray;       
}

【问题讨论】:

标签: java xls


【解决方案1】:

目前这一行:

doubleArray = new double[data1.size()][data2.size()];

正在创建 8500 x 8500 双打,超过 500MB。 您基本上为 8500 行和 8500 列分配了足够的空间。

但是看到您在算法中只使用了其中的 2 列:

doubleArray[i][0] = (Double)data1.get(i);
doubleArray[i][1] = (Double)data2.get(j);

我怀疑您是否真的想创建那么多列。 鉴于您剩余的算法,此分配应该足以满足您的需求:

doubleArray = new double[data1.size()][2];

【讨论】:

    【解决方案2】:

    在您的 java 文件中,您必须使用 double[] 数组。我认为您没有为数组声明正确的大小

    【讨论】:

      【解决方案3】:

      您的堆空间不足。默认堆空间对于您的程序来说是不够的。您需要使用-Xms-Xmx 标志来增加堆空间。

      -Xms 标志指定最小堆空间。 -Xmx 标志指定最大堆空间。

      例如:

      java -Xms512m -Xmx1024m YourMainClassName  
      

      将最小堆空间设置为 512 MB,最大堆空间设置为 1024 MB。

      更多参考:http://www.mkyong.com/java/find-out-your-java-heap-memory-size/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-23
        • 2023-03-13
        • 1970-01-01
        • 2020-12-20
        • 2016-11-24
        • 2013-11-18
        • 2018-07-08
        相关资源
        最近更新 更多