gpt4 book ai didi

java - 内存不足错误 : Java heap space

转载 作者:太空宇宙 更新时间:2023-11-03 12:32:26 25 4
gpt4 key购买 nike

我遇到了 java OutOfMemoryError 问题。该程序基本上查看在 mysql workbench 上运行的 mysql 表,并查询它们以获取某些信息,然后将它们放入 CSV 文件中。

该程序在较小的数据集上工作得很好,但是一旦我使用较大的数据集(日志记录信息的时间而不是大约 40 分钟),我就会收到此错误,对我来说,问题来自于庞大的数据集和程序没有很好地处理信息。或者无法以我现有的方式处理如此大量的数据。

将 Java VM 参数设置为 -xmx1024m 适用于稍大的数据集,但我需要它来处理更大的数据集,但它给出了错误。

这是我很确定是程序某处原因的方法:

// CSV is csvwriter (external lib), sment are Statements, rs is a ResultSet
public void pidsforlog() throws IOException
{
String[] procs;
int count = 0;
String temp = "";

System.out.println("Commence getting PID's out of Log");
try {
sment = con.createStatement();
sment2 = con.createStatement();
String query1a = "SELECT * FROM log, cpuinfo, memoryinfo";
rs = sment.executeQuery(query1a);
procs = new String[countThrough(rs)];

// SIMPLY GETS UNIQUE PROCESSES OUT OF TABLES AND STORES IN ARRAY
while (rs.next()) {
temp = rs.getString("Process");

if(Arrays.asList(procs).contains(temp)) {
} else {
procs[count] = temp;
count++;
}
}

// BELIEVE THE PROBLEM LIES BELOW HERE. SIZE OF THE RESULTSET TOO BIG?
for(int i = 0; i < procs.length; i++) {
if(procs[i] == null) {
} else {
String query = "SELECT DISTINCT * FROM log, cpuinfo, memoryinfo WHERE log.Process = " + "'" + procs[i] + "'" + " AND cpuinfo.Process = " + "'" + procs[i] + "'" + " AND memoryinfo.Process = " + "'" + procs[i] + "' AND log.Timestamp = cpuinfo.Timestamp = memoryinfo.Timestamp";
System.out.println(query);
rs = sment.executeQuery(query);

writer = new CSVWriter(new FileWriter(procs[i] + ".csv"), ',');
writer.writeAll(rs, true);
writer.flush();
}
}
writer.close();
} catch (SQLException e) {
notify("Error pidslog", e);
}
}; // end of method

请随时询问您是否需要源代码或更多信息,因为我迫切希望修复此问题!

谢谢。

最佳答案

SELECT * FROM log, cpuinfo, memoryinfo 肯定会给出一个巨大的结果集。它将给出所有 3 个表中所有行的笛卡尔积。

在没有看到表结构(或不知道所需结果)的情况下很难确定解决方案,但我怀疑您想要某种连接条件来限制结果集,或者使用 UNION 啦啦;

SELECT Process FROM log
UNION
SELECT Process FROM cpuinfo
UNION
SELECT Process FROM memoryinfo

...这只会为所有 3 个表中的 Process 提供所有不同的值。

你的第二个SQL语句看起来也有点奇怪;

SELECT DISTINCT * 
FROM log, cpuinfo, memoryinfo
WHERE log.Process = @param1
AND cpuinfo.Process = @param1
AND memoryinfo.Process = @param1
AND log.Timestamp = cpuinfo.Timestamp = memoryinfo.Timestamp

看起来您正在尝试同时从所有 3 个日志中进行选择,但最终得到的是另一个笛卡尔积。您确定获得了预期的结果集吗?

关于java - 内存不足错误 : Java heap space,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14774497/

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