Gibt es einen portablen Weg, um herauszufinden, wie viele Dateien eine JVM von der VM aus geöffnet hat?

8

Ich schreibe Tests für einige Java-Dateien und möchte sicherstellen, dass alle Dateien ordnungsgemäß geschlossen werden. Ich möchte 'lsof' nicht ausführen, da dies mehr Dateien öffnet und die Testsuite nicht portabel macht. Weiß jemand einen Weg, dies zu tun?

    
David Tinker 30.10.2012, 17:29
quelle

1 Antwort

2

Wenn Sie nach etwas suchen, das Teil des JDK ist, ist die Antwort nein.

Sie könnten etwas finden, das JVMTI verwendet, aber das würde nicht funktionieren tragbar sein (es ist eine native Schnittstelle). Oder etwas, das JPDA verwendet, aber das würde eine zweite JVM erfordern. Ich gebe dir diese zwei Akronyme als Start für das Googeln.

Wenn Sie in-JVM laufen und portabel sein wollen, müssen Sie eine Factory für Ihre Dateireferenzen einführen: Ersetze alle new FileInputStream() , new FileOutputStream() , new RandomAccessFile() , new FileReader und new FileWriter ruft mit Methoden dieses Factory-Objekts auf. Diese Factory gibt Unterklassen dieser Objekte zurück, bei denen die close() -Methode überschrieben wurde. Es wird auch ein "open files" -Zähler inkrementiert, der dann um den überschriebenen close() dekrementiert wird.

Die Factory-Methoden und der Zähler müssen statisch und synchronisiert sein (es sei denn, Sie möchten die Factory einspeisen) und sollten eine Systemeigenschaft verwenden, um zu entscheiden, ob ein unterklassierter Stream oder die JDK-Version zurückgegeben werden soll.

Ich persönlich würde den Kommentar in dem Kommentar übernehmen und FindBugs zuerst verwenden.

    
kdgregory 30.10.2012, 18:20
quelle

Tags und Links