使用opencsv-java.lang.OutOfMemoryError:Java堆空间

205

opencsv用来解析两个csv文件。我只从这两个文件中复制一些值。

我有一个单独的函数来处理CDax.csv看起来像这样:

在此处输入图片说明

public HashMap<String,String> readCDax() throws Exception {
    String csvDaxFile = "C:\\Users\\CDAX.csv";

    CSVReader reader = new CSVReader(new FileReader(csvDaxFile), ';');
    String [] line;
    HashMap<String, String> cdaxMap = new HashMap<String, String>();

    while ((line = reader.readNext()) != null) {            
        cdaxMap.put(line[0], line[7]);
    }

    System.out.println("Process CDax File!");

    reader.close();
    return cdaxMap;
}

我的主要方法是run()在我的主要方法中执行的:

public void run()引发异常{

while ((firstLine = reader.readNext()) != null && (secondLine = reader.readNext()) != null && i<10) {            

    //fileName of the String
    fileName = firstLine[0];

    writerPath = "C:\\Users\\" + fileName + ".csv";
    //write csv file
    CSVWriter writer = new CSVWriter(new FileWriter(writerPath), ';');

    //write Header
    //String[] entries = "Name;Date;TotalReturn;Currency".split(";");
    String [] entries = {"Name","Date", "TotalReturn", "Currency"};

    writer.writeNext(entries);

    //create Content

    //companyName of the String
    companyName = secondLine[1];

    //currency
    currency = secondLine[2];

    //dates
    dateList = new ArrayList<String>();
    for(int p = 3; p < firstLine.length; p++) {
        dateList.add(firstLine[p]);
    }

    //total returns
    returnList = new ArrayList<String>();
    for(int j = 3; j < secondLine.length; j++) {
        returnList.add(secondLine[j]);
    }

    // cDaxList
    cDaxList = new ArrayList<String>();
    for(int j = 1; j <dateList.size(); j++) {
        if(cDaxMethodValuesMap.containsKey(dateList.get(j))){
            cDaxList.add(cDaxMethodValuesMap.get(dateList.get(j)));
        } else{
            dateList.add("na"); // I get the error here!
        }
    }

    if(dateList.size()!=returnList.size()) {
        System.out.println("Dates and Returns do not have the same length!");
    }

    int minSize = Math.min(dateList.size(), returnList.size());

    //"Name;Date;TotalReturn;Currency"
    List<String[]> data = new ArrayList<String[]>();
    for(int m = 0; m < minSize; m++) {
        data.add(new String[] {companyName, dateList.get(m), returnList.get(m), currency, cDaxList.get(m)});
    }

    writer.writeAll(data);

    //close Writer
    writer.close();

    i++;
    System.out.println(fileName + " parsed successfully!");


}
System.out.println("Done");

}

但是,当我运行程序时,我得到:

Process CDax File!
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2760)
    at java.util.Arrays.copyOf(Arrays.java:2734)
    at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
    at java.util.ArrayList.add(ArrayList.java:351)
    at com.TransformCSV.main.ParseCSV.run(ParseCSV.java:109)
    at com.TransformCSV.main.ParseCSV.main(ParseCSV.java:21)

我在此方法中收到错误:

cDaxList = new ArrayList<String>();
for(int j = 1; j <dateList.size(); j++) {
    if(cDaxMethodValuesMap.containsKey(dateList.get(j))){
        cDaxList.add(cDaxMethodValuesMap.get(dateList.get(j)));
    } else{
        dateList.add("na"); //I get the error here!!!
    }
}

我试图通过vm设置来放置heapsize,但是我不认为应该这样做,因为我只在两个csv文件中仅读取了3000值。

感谢您的回覆!

greg-449

您的循环:

for(int j = 1; j <dateList.size(); j++) {

正在循环,dateList但在该循环中您要添加到dateList

dateList.add("na"); //I get the error here!!!

所以dateList会越来越大,直到您用尽内存。dateList.size()每次循环都会被评估,而不是一开始就评估一次。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

错误java.lang.OutOfMemoryError:Java堆空间

java.lang.OutOfMemoryError:带有蜂巢的Java堆空间

PySpark:java.lang.OutofMemoryError:Java堆空间

java.lang.OutOfMemoryError:Maven中的Java堆空间

java.lang.OutOfMemoryError:Java堆空间

IntelliJ Idea提供java.lang.OutOfMemoryError:即使增加堆大小后,Java堆空间错误

在Eclipse中增加堆空间:(java.lang.OutOfMemoryError)

java.lang.OutOfMemoryError:使用Apache POI读取excel时的Java堆空间

BlazeDS和ColdFusion-jRun内存使用量增加导致java.lang.OutOfMemoryError:Java堆空间

如何修复java.lang.OutOfMemoryError:Java堆空间错误?

java.lang.OutOfMemoryError:Java堆空间异常

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

kafka.server.KafkaServerStartable-java.lang.OutOfMemoryError:Java堆空间

如何解决java.lang.OutOfMemoryError:Java堆空间而不增加堆内存大小

使用GraphAware NLP运行“ ga.nlp.annotate”时出现“ java.lang.OutOfMemoryError:Java堆空间”

AWS Glue java.lang.OutOfMemoryError:Java堆空间

Eclipse Java 1.8 java.lang.outofmemoryerror:Java堆空间

线程“主”中的异常java.lang.OutOfMemoryError:使用util包时的Java堆空间

水壶问题java.lang.OutOfMemoryError:Java堆空间

使用toPandas()和databricks连接时遇到“ java.lang.OutOfMemoryError:Java堆空间”

获取“ java.lang.OutOfMemoryError:Java堆空间”

严重:Java堆空间java.lang.OutOfMemoryError:Java堆空间

java.lang.OutOfMemoryError:Java堆空间

java.lang.OutOfMemoryError:Java堆空间Hadoop Ubuntu

java.lang.OutOfMemoryError:Java堆空间?

OutOfMemoryError:使用 XSLT 转换的 Java 堆空间

MetaMap java.lang.OutOfMemoryError: Java 堆空间

KAFKA 和 SSL:java.lang.OutOfMemoryError:在 KAFKA SSL 集群上使用 kafka-topics 命令时的 Java 堆空间

mongo toLIst() java.lang.OutOfMemoryError: Java 堆空间