【发布时间】:2009-07-22 13:28:53
【问题描述】:
以下代码会导致内存泄漏吗?使用 StringBuffer 真的会提高内存使用率吗?
一点背景知识:一位同事一直在推动他关于内存泄漏的理论,他认为这是有问题的代码(没有进行任何类型的分析),他声称这会导致内存泄漏。我不同意这一点,所以我想我会把它交给其他一些开发人员以获得第三方的意见。
List partCollection = new ArrayList()
String partKeyID = null;
String sPartNbr = null;
String partDescription = null;
while(rsPartRes.next())
{
partKeyID = rsPartRes.getString("PART_KEY_ID");
sPartNbr = rsPartRes.getString("PART_NBR");
partDescription = rsPartRes.getString("PART_DESC");
SomeValueObject someValueObject = new SomeValueObject();
someValueObject.setPartKeyID(partKeyID);
someValueObject.setSPartNbr(sPartNbr);
someValueObject.setPartDescription(partDescription);
partCollection.add(someValueObject);
}
假设 rsPartRes 是此代码中的一个 ResultSet,它可能包含 100 多条记录。基本上,他担心的是,因为我们正在循环遍历这个结果集而不使用 StringBuffer(在这种情况下,我什至不确定你将如何使用它),它可能会导致内存泄漏。是否有任何人在这里看到这可能导致内存泄漏或性能问题的情况......?
【问题讨论】:
-
不,这是从 DB 代码块中提取的相当标准的 JDBC 对象。
-
当然,假设之后有一个 rsPartRes.close() 和一个 psPartRes.close()(你使用的 PreparedStatement)。
-
你能贴出 SomeValueObject 代码吗,那是唯一可以寻找内存泄漏的地方吗?
-
SomeValueObject 是一个假设的对象,但它纯粹是一个 Bean。
标签: java memory-management jdbc memory-leaks resultset