由于没有使用StringBuffer可能导致内存泄漏?

Jas*_*ltz 1 java memory-leaks memory-management jdbc resultset

以下代码是否会导致内存泄漏?使用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);
 }
Run Code Online (Sandbox Code Playgroud)

假设rsPartRes是此代码中的ResultSet,可能包含100多条记录.基本上,他担心的是因为我们循环遍历这个结果集并且没有使用StringBuffer(在这种情况下,我甚至不确定你将如何使用它),它可能导致内存泄漏.是否有人在这里看到这可能导致内存泄漏或性能问题......?

jjn*_*guy 7

据我所知,没有必要在StringBuffer这里使用.

使用a StringBuffer来提高性能的唯一原因是当你String一遍又一遍地连接时.

String result = "";
while (condition) {
    result += somethingElse;
}
Run Code Online (Sandbox Code Playgroud)

或(这些日子StringBuilder更好的替代品StringBuffer)

StringBuilder result = new StringBuilder();
while (condition) {
    result.append(somethingElse);
}
Run Code Online (Sandbox Code Playgroud)

第二段代码表现得更好.

  • 我将此标记为已接受的答案.我认为我要找的答案是,除非没有连接或严重的字符串操作,否则就不需要StringBuffer. (2认同)