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?
Czy istnieje przenośny sposób sprawdzenia, ile plików JVM ma otworzyć z wnętrza maszyny wirtualnej?
Odpowiedz
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.
- 1. Czy istnieje sposób sprawdzenia, ile procesora zużywa procesor na rdzeń?
- 2. Czy istnieje sposób sprawdzenia, ile pamięci używa zmienna?
- 3. Czy istnieje sposób sprawdzenia, ile powtórzeń wykonaliśmy w pętli for?
- 4. Czy istnieje sposób sprawdzenia, ile parametrów jest wymaganych dla metody?
- 5. Wyłączanie maszyny wirtualnej zwraca wszystkie stany maszyny wirtualnej jako nieznane.
- 6. W jaki sposób maszyny JVM implementują IdentityHashMap?
- 7. Zrozumienie maszyny JVM Lepiej
- 8. Korzystanie z maszyny wirtualnej w grze?
- 9. Czy istnieje lepszy sposób sprawdzenia, czy plik jest zapisywany?
- 10. Utwórz obraz dokowany z istniejącej maszyny wirtualnej
- 11. Używanie maszyny wirtualnej HipHop w systemie Windows
- 12. Java - Najszybszy sposób sprawdzenia, czy URL istnieje
- 13. pytoniczny sposób sprawdzenia, czy coś istnieje?
- 14. Czy istnieje sposób sprawdzenia, czy katalog istnieje w plikach konfiguracyjnych Apache?
- 15. Jak sprawdzić, czy plik istnieje w C++ w sposób przenośny?
- 16. Testowanie maszyny wirtualnej w repozytorium GIT
- 17. Czy istnieje przenośny sposób kopiowania bloku pamięci w języku C#?
- 18. Czy istnieje właściwy sposób sprawdzenia istnienia pliku/katalogu w Javie?
- 19. Przenośny sposób sprawdzania, czy istnieje katalog [Windows/Linux, C]
- 20. Jak sprawdzić nazwę użytkownika i hasło do maszyny wirtualnej Azure?
- 21. Czy istnieje sposób sprawdzenia, czy wybór HTML jest obecnie otwarty?
- 22. Czy istnieje sposób sprawdzenia, czy dwa elementy DOM są równe?
- 23. Czy można uzyskać zewnętrzny adres IP z poziomu wystąpienia maszyny wirtualnej Google Compute?
- 24. Czy istnieje sposób sprawdzenia, ile wiadomości znajduje się w kolejce MSMQ?
- 25. Czy istnieje przenośny odpowiednik __attribute__ (czysty) gcc?
- 26. Jak dodać moduł Javaagent do maszyny JVM bez zatrzymywania maszyny JVM?
- 27. Kopia zapasowa wirtualnej maszyny Microsoft Azure
- 28. Przenoszenie wystąpień maszyny wirtualnej Google między sieciami
- 29. Używanie wirtualnej maszyny do nauki zespołu
- 30. W groovy, czy istnieje sposób sprawdzenia, czy obiekt ma daną metodę?
Zobacz również: http://stackoverflow.com/questions/1661322/too-many-open-file-handles – Puce