Un programme simple pour démontrer la fuite de mémoire en Java
Je cherche un programme simple qui peut démontrer une fuite de mémoire en Java.
Merci.
5 answers
Http://www.codeproject.com/KB/books/EffectiveJava.aspx
Voir Point 6.
Les fuites de mémoire sont par exemple si vous avez des références qui ne sont plus nécessaires mais ne peuvent pas être capturées par le garbage collector.
Il y a des exemples simples par exemple d'IBM qui montre le principe:
Http://www.ibm.com/developerworks/rational/library/05/0816_GuptaPalanki/
Un bon exemple d'un grand livre: http://www.informit.com/articles/article.aspx?p=1216151&seqNum=6
Vector v = new Vector();
while (true)
{
byte b[] = new byte[1048576];
v.add(b);
}
Cela ajoutera continuellement un octet de 1 Mo à un vecteur jusqu'à ce qu'il manque de mémoire
Définissons d'abord ce qu'est une fuite de mémoire dans le contexte Java - c'est une situation où un programme peut contenir par erreur une référence à un objet qui n'est plus jamais utilisé pendant le reste de l'exécution du programme.
Un exemple à cela, serait oublier de fermer un flux ouvert:
class MemoryLeak {
private void startLeaking() throws IOException {
StringBuilder input = new StringBuilder();
URLConnection conn = new URL("www.example.com/file.txt").openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
while (br.readLine() != null) {
input.append(br.readLine());
}
}
public static void main(String[] args) throws IOException {
MemoryLeak ml = new MemoryLeak();
ml.startLeaking();
}
}