【发布时间】:2009-10-18 10:59:29
【问题描述】:
以下一段代码会产生内存泄漏,知道哪一部分吗?
1)
private Deque<Snapshot> snapshots = new LinkedList<Snapshot>();
Iterator<Snapshot> i = world.getSnapshots().descendingIterator();
while (i.hasNext()) {
Snapshot s = i.next();
if (curTime - s.getTimestamp() > 60000) {
i.remove();
} else {
break;
}
}
2)
public static void initilizePreparedStatements() {
try {
insertNewReportRow = Instance.getWorld().getDB().getConnection().prepareStatement("INSERT INTO `rsca2_reports` (`from`, `about`, `time`, `reason`, `snapshot_from`,`snapshot_about`,`chatlogs`, `from_x`, `from_y`, `about_x`, `about_y`) VALUES(?,?,?,?,?,?,?,?,?,?,?)");
} catch (SQLException e) {
e.printStackTrace();
Logger.error(e);
}
}
public synchronized static void submitReport() {
/*removed*/
try {
insertNewReportRow.setLong(1, from);
insertNewReportRow.setLong(2, about);
insertNewReportRow.setLong(3, time);
insertNewReportRow.setInt(4, reason);
insertNewReportRow.setString(5, snapshot_from);
insertNewReportRow.setString(6, snapshot_about);
insertNewReportRow.setString(7, chatlog);
insertNewReportRow.setInt(8, f.getX());
insertNewReportRow.setInt(9, f.getY());
insertNewReportRow.setInt(10, a.getX());
insertNewReportRow.setInt(11, a.getY());
insertNewReportRow.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
Logger.error(e);
}
}
【问题讨论】:
-
只看问题中的小 sn-p 就知道有太多未知数 - 而且 sn-ps 甚至不是完整的代码。也许您可以提供更多信息。
-
我减少了 sn-ps 以仅包含所需的最低限度的内容。快照类: public Snapshot(Player owner) { this.owner = owner; this.eventTime = System.currentTimeMillis(); } public long getTimestamp() { return eventTime; } 如果还有什么不清楚的地方,请询问,以便我解释。
标签: java database memory memory-leaks prepared-statement