Java OutOfMemoryError에 문제가 있습니다. 이 프로그램은 기본적으로 mysql workbench에서 실행되는 mysql 테이블을보고 쿼리하여 특정 정보를 가져온 다음 CSV 파일에 저장합니다.OutOfMemoryError : Java 힙 공간
이 프로그램은 더 작은 데이터 세트로도 잘 작동하지만 한 번 더 큰 데이터 세트 (약 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
나는이 고정을 얻을 필사적 해요 당신이 소스 코드 나 자세한 정보를 원하는 경우 문의 주시기 바랍니다 : 여기에
내가 꽤 확신 방법이 어딘가에 프로그램의 원인이다 !감사합니다.
[프로파일 러] (http://profiler.netbeans.org/)를 사용해 보았습니까? – user000001
메모리의 모든 것을 한번에 처리하지 않고 데이터베이스의 결과를 파일로 스트리밍 할 수 없습니까? – kutschkem
'writer.close()'i.o. flush (루프 내부). 코드에서 개선 할 수있는 많은 기회; 프로그래머를 고용하십시오. –