2016-03-22 6 views
2

У меня есть memory leak проблемы в моем приложении javaFX, я использую инструмент профилирования чистых beans, чтобы помочь мне найти источник утечек, но я ударил стену, так как я не уверен, что именно Я делаю.Утечка памяти в приложении

сейчас я посмотрел учебники, и они говорят, что нужно следить за объектом surviving generations, но я до сих пор не уверен, что с этой информацией. Я сделал снимок экрана с самыми высокими объектами surviving generation, пока я наблюдал за своим приложением.

Может кто-нибудь объяснить мне, что именно я должен делать с этими объектами или они действительно вызывают memory leak?

enter image description here

+1

Посмотрите на это: http://stackoverflow.com/questions/6470651/creating-a-memory-leak-with-java Это не ответ на ваш вопрос, но есть несколько хороших примеров того, как создавать память утечки на Java. Это может помочь вам найти вашу проблему (если ее вообще нет). Трудно сказать, не зная, что должна делать ваша программа;)) – whatTheFox

+0

@noobCoder Были ли у вас проблемы с использованием Eclipse MAT? –

+0

еще нет, но он указал мне в правильном направлении. В настоящее время я поставил его на задний план, так как я чувствую, что могу потратить много часов на поиск проблемы, чего у меня просто нет на данный момент, поскольку я должен представить свой инструмент в ближайшие дни. поэтому в настоящее время все мои усилия направлены на то, чтобы убедиться, что инструмент работает правильно. – noobCoder

ответ

1

Обычным источником неожиданного использования высокой памяти при добавлении объектов в коллекции, а затем не снимая их, когда вы сделали (я вижу изображение вы вывесили показывает HashMap, что может быть проблемой). Типичным решением является использование коллекции, которая не сохранит объект в живых, как только все другие ссылки на него исчезнут, см. WeakHashMap для получения дополнительной информации.

Чтобы разобраться в этих типах проблем, дополнительно захватите hrpof (вы можете использовать VisualVM, JConsole и т. Д.), А затем проанализируйте его в Eclipse MAT или аналогичном инструменте.

+0

Посмотрите на странную вещь: я искал все мои файлы контроллеров «FXML», и я не использовал «HashMaps» в любой момент, поэтому я даже не могу изменить тип коллекции, которую я использую для «WeakHashMap». – noobCoder

+0

Eclipse MAT может рассказать вам, какие объекты потребляют большую часть памяти, и «Объединить самый короткий путь к GC Root» расскажет вам, что их поддерживает. Если HashMap окажется проблемой, которая сообщит вам, кто ее владеет –

+0

Если вы используете JDK, то Java Mission Control может это сделать. Вот отличный учебник для этого: https://www.javacodegeeks.com/2015/03/oracle-java-mission-control-the-ultimate-guide.html – whatTheFox

Смежные вопросы