Mam aplikację kliencką javafx, która po pewnym czasie użycia gromadzi wiele obiektów w dirtynodes [] w jednej ze scen. Narzędzie MAT firmy Eclipse rozpoznało to jako podejrzaną sytuację i możliwy wyciek. Korzysta z 170 MB pamięci, która w moim przypadku wynosi 30%. Są okresowe aktualizacje węzłów w tej scenie. Czy mogę coś z tym zrobić? Czy te dirtynodes zostaną wyczyszczone? Używam java 8 u 51.Przepuszczanie pamięci JavaFX przez dirtynodes
Odpowiedz
Brudne węzły to węzły w scenie, które zostały unieważnione. Są one przetwarzane raz na ramkę, więc jeśli wątek aplikacji JavaFX (wątek UI) jest zajęty, synchronizacja brudnych węzłów nie może się zdarzyć.
Mieliśmy problem na ekranie z listview, gdzie każda komórka listview zawierała wiele prostokątów i tekstów. Cały listview zawierał kilkaset węzłów.
Komórki w widoku listy nie powinny być ponownie używane, ale powinny być tworzone za każdym razem, gdy lista jest odświeżona. Gdy listview miał wiele linii, a użytkownik trzymał pasek przewijania i przesuwał go na minutę, to synchronizacja brudnych węzłów nie mogła się wydarzyć i wyszedł nam z pamięci wyjątek, ponieważ były setki brudnych węzłów.
Moja propozycja polega na sprawdzeniu, czy nie blokujesz wątku aplikacji JavaFX podczas dodawania do niego węzłów.
Dobrą praktyką jest tworzenie węzłów w tle wątku i dodawanie go do sceny w wątku interfejsu użytkownika.
- 1. Przepuszczanie wyjątku jako paczki
- 2. przepuszczanie prądu Data
- 3. Przepuszczanie menedżera jednostek Doctrine do usługi
- 4. wyciek pamięci spowodowane przez Logger
- 5. Alokacja pamięci zoptymalizowana przez kompilatory
- 6. Podnoszenie pamięci na przycisku dialogowym kliknięcie w aplikacji javafx
- 7. Jak uzyskać ilość pamięci używanej przez aplikację
- 8. Monitorowanie zużycia pamięci przez różne obiekty Java
- 9. Zapobieganie generowaniu pamięci podręcznej przez iOS QuickLook
- 10. Wrzucanie zawartości utraconej pamięci zgłoszonej przez Valgrind
- 11. Zwiększenie wykorzystania pamięci przez demona gradle
- 12. Phantomjs umiera przez wysokie zużycie pamięci
- 13. Uzyskaj adres pamięci wskazywany przez wskaźnik ctypes
- 14. Kompresja pamięci podręcznej i gzip przez htaccess
- 15. Ograniczanie pamięci używanej przez dużego dicta
- 16. Obsługa wycieków pamięci spowodowanych przez zewnętrzny zespół
- 17. przepuszczanie ArrayCollection z ColdFusion do Flex (z BlazeDS)
- 18. Wdrożenie zwrotnego w Pythonie - przepuszczanie wpłacone odniesienie do aktualnej funkcji
- 19. C# wiele argumentów w jednym do DRY out przepuszczanie parametrów
- 20. Przepuszczanie pustego bajtu za pomocą specyfikatora formatu w `printf`
- 21. JavaFX combobox css stylizacja
- 22. JavaFX TextArea i autoscroll
- 23. JavaFX HBox ukryj przedmiot
- 24. Ograniczanie aktualizacji javafx gui
- 25. MP4 nieobsługiwany w JavaFX?
- 26. JavaFX 2.1 i wątki? -lub- Kończenie aplikacji JavaFX z gracją?
- 27. JavaFX HTMLEditor - Funkcja wstawiania obrazu
- 28. Efektywne przycinanie obrazu w JavaFX
- 29. Odpowiednik JavaFX pakietu Swing()
- 30. Wyłączenie przycisku w JavaFX
Nie zdziwiłbym się, gdyby węzły tam zostały poddane recyklingowi (wzorzec masy ciężkiej?) ... – Rekin
Nie sądzę, myślę, że tworzy nowe, a zatem brudne węzły zawierają 170 MB danych, ponieważ dotyczy do większej liczby węzłów niż w gui – Martin