Le code suivant peut-il provoquer une fuite de mémoire? L'utilisation d'un StringBuffer améliorerait-elle réellement l'utilisation de la mémoire? Un petit contexte: Un collègue a poussé ses théories sur les fuites de mémoire, et c'est un code qu'il a identifié comme étant un code de problème (sans faire de profilage), ce qui, selon lui, peut causer une fuite de mémoire. Je suis en désaccord avec cela, alors j'ai pensé que je le mettrais à d'autres développeurs pour obtenir une opinion de tiers.Fuite possible de mémoire due à l'absence de 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);
}
Supposons que rsPartRes est un ResultSet dans ce code qui peut contenir plus de 100 enregistrements. Fondamentalement, son souci est que parce que nous bouclons à travers ce jeu de résultats et n'utilise pas un StringBuffer (qui, dans ce cas, je ne suis même pas sûr comment vous en utiliseriez un), cela pourrait causer des fuites de mémoire. Y a-t-il un cas que quelqu'un voit ici où cela pourrait causer des fuites de mémoire ou des problèmes de performance ...?
Non, il s'agit d'une extraction d'objet JDBC assez standard à partir d'un bloc de code DB. – JeeBee
En supposant qu'il existe un rsPartRes.close() et un psPartRes.close() (le PreparedStatement que vous avez utilisé) après, bien sûr. – JeeBee
Pouvez-vous poster le code SomeValueObject, c'est le seul endroit à gauche pour chercher une fuite de mémoire? – Lazarus