我有一个包含以下代码的侦听器方法。该方法每秒被调用多次。但是,它会导致我的应用程序内存泄漏。
我认为这可能与我处理准备好的语句的方式有关(为收到的每个对象创建新的语句)。我在做任何明显错误的事情吗?使用后我应该将 PS 设置为 null 吗?是否出于某种原因保留了 PS?
另外,我正在手动指定 PS 的表名。这种重新定义是否完全违背了使用准备好的声明的目的?
String text = object.getText();
//determineDb method determines the db for the object based on its content
ArrayList<Topic> toAddList = determineDatabase(text);
if (toAddList.size() > 0) {
int epoch = (int) (System.currentTimeMillis() / 1000);
//Topic class contains DB info, topic name and associated terms
for (Topic a : toAddList) {
try {
pst = con
.prepareStatement("INSERT INTO "
+ a.getTopic()
+ " (created, received, username, text, ignored, retweet, value) VALUES(?, ?, ?, ?, ?, ?, ?)");
pst.setString(1, String.valueOf(object.getCreatedAt().getTime() / 1000));
pst.setString(2, String.valueOf(epoch));
pst.setString(3, object.getUser());
pst.setString(4, text);
pst.setInt(5, 0);
pst.setInt(6, object.isOriginal() ? 1 : 0);
pst.setDouble(7, otherClass.analyzeString(object.getText()));
pst.executeUpdate();
} catch (SQLException ex) {
System.out.println(ex);
}
}
}