powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите с анализом дампа кучи
18 сообщений из 18, страница 1 из 1
Помогите с анализом дампа кучи
    #38700033
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго вам дня, уважаемые гуру)

Занялся поиском утечек памяти в приложении. Так вот, после отработки сборщика мусора остаются в живых некоторые объекты. Не могу понять почему. Для примера интересует GUI.personal.RulePass_gui

ссылка на дамп: https://www.dropbox.com/sh/qublrunvqovdbme/AACF3kZTHg56GTSXn-NYYEB_a

Заранее благодарю за помощь
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700056
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700061
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя потока - safe_ref
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700074
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

спасибо, что откликнулись. Я видел, что ссылка идет туда. Но, в том потоке, на мой взгляд, нет ничего криминального. Поток работает в фоне, а в момент когда я снимал дамп, поток был в ожидании, да в принципе, после запуска приложения поток дальше Class take = tasks.take(); не заходил, т.к. чтобы в tasks попал объект, нужно было выполнить действия, которые не выполнял.
Не понимаю, почему этот поток держит объекты :(

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
        save_ref=new Thread(new Runnable() {

            @Override
            public void run() {
                while (true && !Thread.currentThread().isInterrupted()) {
                    try {
                        Class take = tasks.take();
                        

                        for (Field field : fields) {
                            try {
                                Object get = field.get(null);
                                if (get instanceof Reference) {
                                    Reference ref = (Reference) get;
                                    if (ref.getClazz().equals(take)) {
                                        ((Reference) get).saveReference();
                                        break;
                                    }
                                }
                            } catch (IllegalArgumentException | IllegalAccessException ex) {
                                Logger.getLogger(ReferencesController.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    } catch (InterruptedException ex) {
                        Thread.currentThread().interrupt();
                    }
                }
            }
        });
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700089
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
закомментировал запуск потока. в итоге картина такова:
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700106
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваш класс References имеет статическое поле REFERENCES_PERSONAL, которое и ссылается на GUI.personal.RulePass_gui.
Что именно не понятно?
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700111
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, спасибо! Уже все понял, исправляю)
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700135
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, еще один вопрос.
Подскажите пожалуйста, как грамотно сделать unbind при закрытии формы для такого кода:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
        list.setCellFactory(new Callback<ListView<T>, ListCell<T>>() {
            @Override
            public ListCell<T> call(ListView<T> arg0) {
                final Label leadLbl = new Label();
                final Tooltip tooltip = new Tooltip();
                ListCell<T> cell = new ListCell<T>() {
                    @Override
                    public void updateItem(T item, boolean empty) {
                        super.updateItem(item, empty);
                        if (item != null) {
                            textProperty().bind(item.nameProperty());
                            leadLbl.textProperty().bind(item.nameProperty());
                            tooltip.textProperty().bind(item.nameProperty());
                            setTooltip(tooltip);
                        }
                    }
                };
                return cell;
            }

        });
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700173
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danatriel,

Разве не так?
Код: java
1.
2.
3.
                            textProperty().unbind();
                            leadLbl.textProperty().unbind();
                            tooltip.textProperty().unbind();
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700198
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, danatriel

как вы такие красивые картинки дампа делаете?
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700200
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90как вы такие красивые картинки дампа делаете?
JDK/bin/jvisualvm
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700218
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Blazkowicz, да, именно так, но вопрос был в какой момент нужно анбиндить. Уже разобрался
                        if (item != null) {
                            textProperty().bind(item.nameProperty());
                            leadLbl.textProperty().bind(item.nameProperty());
                            tooltip.textProperty().bind(item.nameProperty());
                            setTooltip(tooltip);
                        }else{
                            textProperty().unbind();
                            leadLbl.textProperty().unbind();
                            tooltip.textProperty().unbind();
                        }
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700219
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,ну или в netbeans есть свое средство профилирования (то же самое, что и visualvm), но можно переходить к исходникам прям оттуда
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700643
HoBTID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danatrielBlazkowicz, еще один вопрос.
Подскажите пожалуйста, как грамотно сделать unbind при закрытии формы для такого кода:
По моему скромному мнению, самое грамотное решение - использовать WeakReference для слушателей,
тогда никакого "unbind" делать не надо.

Но не знаю, как с этим обстоят дела в JavaFX.
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700677
HoBTID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, не важно как с этим в JavaFX, weak ссылки нужно хранить в модели и все будет хорошо :-)
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700856
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoBTIDПо моему скромному мнению, самое грамотное решение - использовать WeakReference для слушателей,
тогда никакого "unbind" делать не надо.

Так это. А где-то надо ссылку на слушателя хранить, чтобы он не собрался когда не надо.
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700944
HoBTID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczТак это. А где-то надо ссылку на слушателя хранить, чтобы он не собрался когда не надо.
Да, ссылку хранит тот, кто вешает слушателя: контроллер, в случае MVC, модель представления, в случае MVVM,
или само представление, если не использовать паттерны.
...
Рейтинг: 0 / 0
Помогите с анализом дампа кучи
    #38700945
HoBTID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, если в случае MVC сслыка на контроллер у нас хранится только в форме,
то при ее закрытии контроллер становится unreachable,
т.к. только он содержит обычные ссылки на слушателей, они становятся weakly reachable и собираются сборщиком мусора.

Про отвязку модели от формы беспокоиться не надо, все произойдет автоматически.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите с анализом дампа кучи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]