Java nie powinna mieć przecieków pamięci, ale nadal jest możliwa. Kiedy mój program ma wyciek pamięci, mogę to naprawić (mam nadzieję). Ale kiedy mają jakieś paczki stron trzecich, co mogę zrobić? Praktycznie nic oprócz tego, że nie korzystasz z tego pakietu.Piaskownica do pamięci
Czy istnieje inne rozwiązanie? Podoba mi się pomysł piaskownicy. Możesz robić, co chcesz w danym obszarze, a ty "fizycznie" nie masz możliwości przeszkadzania innym poza twoim pudełkiem. Czy istnieje sposób na stworzenie takiej piaskownicy dla użycia pamięci w Javie? Imagine = utwórz piaskownicę do użycia pamięci, pozwól, aby jakaś paczka robiła cokolwiek robi, weź wyniki i usuń tę piaskownicę z resztkami śmieci tutaj! Brak komplikacji z GC, brak czyszczenia lub dyspozycji pamięci. Po prostu usuń i zapomnij o tym.
Czy można to zrobić?
że to dobry pomysł, ale trochę drogie. Czy możesz sobie wyobrazić, aby uruchomić nową maszynę JVM dla każdego żądania bazy danych? Byłem kiedyś na konferencji JavaOne na prezentacji Plumbr "Założę się, że masz wyciek pamięci" i kilka ich przykładów dotyczyło wycieku pamięci w standardowych sterownikach baz danych. To był MySql, jeśli się nie mylę. –
Można użyć ClassLoaders do izolowania klas problemów. Następnie, aby wyczyścić pamięć używaną przez bibliotekę, usuwa się wszystkie odniesienia do jej klas i programu ładującego. Można również użyć oddzielnej grupy wątków do izolowania wątków bibliotek, co pozwala łatwo je zabić. –
@IzoldTytykalo - możesz użyć jednej JVM dla 2 zapytań do bazy danych :) lub więcej. – ZhongYu