2012-10-30 7 views
8

Piszę testy dla kodu obsługi plików Java i chcę się upewnić, że wszystkie pliki są poprawnie zamknięte. Nie chcę uruchamiać "lsof", ponieważ spowoduje to otwarcie większej liczby plików i sprawi, że pakiet testowy stanie się nieprzenośny. Ktoś wie, jak to zrobić?Czy istnieje przenośny sposób sprawdzenia, ile plików JVM ma otworzyć z wnętrza maszyny wirtualnej?

+0

Zobacz również: http://stackoverflow.com/questions/1661322/too-many-open-file-handles – Puce

Odpowiedz

2

Jeśli szukasz czegoś, co jest częścią JDK, odpowiedź brzmi: nie.

Być może znajdziesz coś, co używa JVMTI, ale to nie byłoby przenośne (jest to natywny interfejs). Lub coś, co używa JPDA, ale to wymagałoby drugiej maszyny JVM. Podaję te dwa akronimy jako początek Googling.

Jeśli chcesz uruchomić w-JVM i być przenośne, musisz wprowadzić fabrykę dla swoich referencji plików: wymień wszystkie new FileInputStream(), new FileOutputStream(), new RandomAccessFile(), new FileReader i new FileWriter połączeń z metod dotyczących tego obiektu fabrycznego. Ta fabryka zwróci podklasy tych obiektów, które zostały zastąpione przez metodę close(). Będzie także zwiększał licznik "otwartych plików", który jest następnie zmniejszany przez przesłonięty close().

Fabryczne metody i licznik będą musiały być statyczne i zsynchronizowane (chyba że chcesz wstrzyknąć fabrykę) i powinny używać właściwości systemowej, aby zdecydować, czy zwrócić strumień z podklasą, czy wersję JDK.

Osobiście skorzystam z porady w komentarzu i najpierw skorzystam z FindBugs.

Powiązane problemy