Home > Programmierung > Automatisches Ressourcenmanagement in Java 7

Automatisches Ressourcenmanagement in Java 7

10. März 2009

Wenn in einem Java-Programm Ressourcen (Dateien, SQL-Verbindungen, usw.) geöffnet werden, muss der Programmierer darauf achten, die Ressourcen auch ordnungsgemäß wieder frei zu geben. Geschieht dies nicht, erzeugt das Programm ein “Ressourcen-Leck”. Die Folgen können unterschiedlich sein, von nicht spürbaren Performanceeinbußen bis hin zur Instabilität und Untauglichkeit des gesamten Programms.
Um diese Fehlerquelle im Vorfeld zu vermeiden, wäre es also wünschenswert, dass eine Programmierplattform das Ressourcenmanagement weitestgehend automatisch durchführen kann. In Java ist das bisher nicht möglich, aber für Java 7 gibt es einen Änderungsvorschlag dafür.

So sähe dann mit Java 7 z.B. das Kopieren einer Datei aus:

1
2
3
4
5
6
7
8
9
    static void copy(String src, String dest) throws IOException {
        try (InputStream in = new FileInputStream(src);
             OutputStream out = new FileOutputStream(dest)) {
            byte[] buf = new byte[8192];
            int n;
            while ((n = in.read(buf)) >= 0)
                out.write(buf, 0, n);
        }
    }


Statt wie bisher:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    static void copy(String src, String dest) throws IOException {
        InputStream in = new FileInputStream(src);
        try {
            OutputStream out = new FileOutputStream(dest);
            try {
                byte[] buf = new byte[8 * 1024];
                int n;
                while ((n = in.read(buf)) >= 0)
                    out.write(buf, 0, n);
            } finally {
                out.close();
            }
        } finally {
            in.close();
        }
    }

Nach dem Schlüsselwort try könnten ab sofort Ressourcen deklariert werden, die nur innerhalb des anschließenden Blocks gültig sind und danach von der Laufzeitumgebung wieder geschlossen werden. Dafür müssen die Ressourcen das neue Interface java.lang.Disposable implementieren.

Der Syntax erinnert sehr an das Using Statement in C#.

Der Vorschlag für Java 7 ist so gewählt, dass der Eingriff in die Sprache sehr gering ist und abwärtskompatibel bleibt. Bisherige Programme werden von der Änderung nicht beeinträchtigt.

Ich persönlich finde den Vorschlag sinnvoll, weil ich eben denke, dass die Code-Qualität von Java-Programmen dadurch insgesamt steigen wird.
Ich hoffe, dass wir das automatische Ressourcenmanagement in Java 7 vorfinden werden.

Mehr Informationen findet man hier: Automatic Resource Management

KategorienProgrammierung Tags:
Kommentare sind geschlossen