Ich schreibe Tests für einige Java-Datei-Handling-Code und möchte sicherstellen, dass alle Dateien ordnungsgemäß geschlossen sind. 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?Gibt es eine Möglichkeit, herauszufinden, wie viele Dateien eine JVM von der VM aus geöffnet hat?
Antwort
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äre nicht portabel (es ist eine native Schnittstelle). Oder etwas, das JPDA verwendet, aber das würde eine zweite JVM erfordern. Ich gebe Ihnen diese zwei Akronyme als Start für das Googeln.
Wenn Sie in-JVM ausgeführt werden soll und tragbar sein, erhalten Sie eine Fabrik für die Dateireferenzen einführen müssen: Ersetzen Sie alle new FileInputStream()
, new FileOutputStream()
, new RandomAccessFile()
, new FileReader
und new FileWriter
Anrufe mit Methoden, die auf diesem Factory-Objekt. Diese Factory gibt Unterklassen dieser Objekte zurück, bei denen die Methode close()
überschrieben wurde. Es wird auch einen "open files" -Zähler inkrementieren, der dann von dem ü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.
Persönlich würde ich den Rat in dem Kommentar nehmen, und FindBugs zuerst verwenden.
- 1. Gibt es eine Möglichkeit herauszufinden, ob eine Softwaretastatur angezeigt wird?
- 2. Gibt es eine Möglichkeit herauszufinden, um wie viele Grad eine Ansicht während einer Animation gedreht wird?
- 3. Gibt es eine Möglichkeit, den Grund herauszufinden, wenn ftp_put fehlschlägt?
- 4. Gibt es eine Möglichkeit herauszufinden, woher eine CSS-Regel kommt?
- 5. Gibt es eine Möglichkeit, herauszufinden, welcher Code eine Assembly verwendet?
- 6. Gibt es eine Möglichkeit herauszufinden, ob ein Thread blockiert ist?
- 7. Gibt es eine Möglichkeit herauszufinden, welche Datei require_once benutzt?
- 8. Gibt es eine Möglichkeit, das Alter einer ASP.net-Sitzung herauszufinden?
- 9. Gibt es eine Möglichkeit, die Größe/Größe Ihrer Datenbanktabellen herauszufinden?
- 10. Gibt es eine Möglichkeit, alle Dateien aus einem Blob azurblauen
- 11. Gibt es eine Möglichkeit, Dateien aus C++ zu unterscheiden?
- 12. Gibt es eine Möglichkeit, eine Variable aus der Superklasse wegzulassen?
- 13. Gibt es eine Möglichkeit, welche Klassen ein ClassLoader geladen hat?
- 14. Gibt es eine Möglichkeit herauszufinden, ob eine Anwendung Core Animation oder OpenGL ES verwendet?
- 15. Gibt es eine Möglichkeit zu sehen, wie viele Akteure ein ActorSystem hat und wie sie heißen?
- 16. Gibt es eine Möglichkeit herauszufinden, ob A eine Submatrix von B ist?
- 17. Gibt es eine Möglichkeit herauszufinden, welcher Benutzer einen Prozess aus dem Prozess task_struct des Prozesses besitzt?
- 18. Gibt es eine Möglichkeit, herauszufinden, ob eine .js-Datei jquery sintax verwendet?
- 19. Gibt es eine Möglichkeit innerhalb der JVM festzustellen, ob eine bestimmte Methode JIT kompiliert wurde?
- 20. Gibt es nur eine "Nachrichtenpumpe" oder viele?
- 21. Gibt es eine Möglichkeit herauszufinden, wie oft eine Klasse in PHP instanziiert wurde?
- 22. Gibt es eine einfache Möglichkeit, eine Tabelle in Prozedur umzubenennen?
- 23. Gibt es eine Möglichkeit, jvm Args über die Befehlszeile an Maven übergeben?
- 24. Gibt es eine Möglichkeit herauszufinden, ob ein Element eine Bildlaufleiste mit JQuery enthält?
- 25. Gibt es eine Möglichkeit, die Klasse des Formulars mithilfe von Eclipse herauszufinden?
- 26. Gibt es eine Möglichkeit in Dateien in TypedStream Format
- 27. Gibt es (eine automatisierte) Möglichkeit, Hudson CI-Dateien zu sichern?
- 28. Gibt es eine Möglichkeit, pdb-Dateien mit ilmerge zusammenzuführen?
- 29. Gibt es eine Möglichkeit, eine Liste der Prelude-Funktionen von der Haskell-Konsole aus anzuzeigen?
- 30. Gibt es eine Möglichkeit, eine CABasicAnimation anzuhalten?
Siehe auch: http://stackoverflow.com/questions/1661322/too-many-open-file-handles – Puce