gpt4 book ai didi

java - 循环遍历中等大小的数据集时,Kotlin 出现内存不足错误

转载 作者:行者123 更新时间:2023-11-29 06:26:58 25 4
gpt4 key购买 nike

我在 Kotlin 中运行以下循环并抛出内存不足错误。我正在运行它来读取 csv 文件中的行。 “记录”的大小为 6422。

fun readCSVFile(filePath: String): List<String> {
val reader = FileReader(filePath)
val records = CSVFormat.DEFAULT.parse(reader)
val rows = mutableListOf<String>()

var output = ""
records.forEach() {
val size = it.size()
for (i in 0 until it.size()-1) {
output = output + it.get(i) + ","
}
output.dropLast(1)
rows.add(output)
}
return rows
}

下面是我得到的异常。

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOf(Arrays.java:3332)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448)
at java.lang.StringBuilder.append(StringBuilder.java:136)
at trivago.ti.tools.FileProcessor.readCSVFile(FileProcessor.kt:16)
at trivago.ti.tools.ComparatorMainKt.main(ComparatorMain.kt:25)

我在 Java 中执行了相同的逻辑,但它工作正常。以下是我在 Java 中的内容。

private static List<String> readCSVFile(String filePath) throws IOException {
Reader in = new FileReader(filePath);
Iterable<CSVRecord> records = CSVFormat.DEFAULT.parse(in);
List<String> rows = new ArrayList<>();
for (CSVRecord record : records) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < record.size(); i++)
builder.append(record.get(i) + ",");
builder.deleteCharAt(builder.length() - 1);
rows.add(builder.toString());
}
return rows;
}

为什么 Kotlin 对此有问题?我在循环中做错了什么吗?非常感谢任何帮助,因为我是 Kotlin 的新手。

最佳答案

我觉得你的代码有问题

records.forEach() {
output = "" // clear output ;)
...
}

将其与您的 java 代码进行比较

for (CSVRecord record : records) {
StringBuilder builder = new StringBuilder(); // clear builder
...
}

关于java - 循环遍历中等大小的数据集时,Kotlin 出现内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53302540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com