![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Есть следующий класс:
по какой то причине функция RenewList() даёт утечку памяти. |
|||
|
||||
| hamsterKSU |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 401 Регистрация: 20.10.2006 Где: Украина, Херсон Репутация: 1 Всего: 11 |
вопрос - а как ты определяешь утечку памяти?
|
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
С помощью Profiler-а.
|
|||
|
||||
| hamsterKSU |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 401 Регистрация: 20.10.2006 Где: Украина, Херсон Репутация: 1 Всего: 11 |
ты хочешь сказать что сборшик не почистит за табой?
|
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
нет, я хочу сказать что он не может вучистить, так как по видимому создаются объекты и не освобождаются при каждом обращении к fireContentsChanged. |
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Диагностировать утечку можно только если получаете OutOfMemoryError. Если никому не нужные объекты не уничтожаются при наличии свобоной памяти - это еще ничего не значит. -------------------- ![]() ![]() |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
||||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Дайте код, который можно запустить, чтоб он упал с OutOfMemoryError, как предполагается из за утечки памяти. Интересно. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
он вылетает по: Java heap space
Дать весь код немного проблемматично, это около 10000 строк кода. конечно если сильно хочешь могу тебе послать весь апплет... В лю бом случае то что происходит это: есть JList со списком отправляеммыч страниц, при том что в каждой ячейки есть JProgressBar, так как это JList нузчно всё обновлять в ручную. То чем я и занимаюсь в фучкцие RenewList(), и казчдое обращение к ней выедает мне по немногу хеап, и не отпускает. В результате он заканчивается... |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
неужели никто с этим не сталкивался?
|
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Естественно, 10000 строк кода оценить будет не легко. Я хочу чтобы ты написал небольшой пример демонстрирующий подобное поведение. Чтобы его можно было запустить и посмотреть на OutOfMemoryError. Да и пока пример этот пишешь может и сам разберешься что не так. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ошибка в Sun-овских классах - маловероятна. Скорее всего ты где-то не обнуляешь переменную. Пройдись по коду и посмотри где у тебя происходит выделение больших объемов памяти. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| ShurikA |
|
||||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Проблемма как раз с выделением маленьких, он медленно но верно всё съедает. дело в том что если в функцие:
закоментировать fireContentsChanged(this,0,pages.size()); то утечки нету... |
||||
|
|||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Там может вызываться куча слушателей, которые могут делать все что угодно. Надо смотреть твои обработчики, что они делают. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Ты имеешь в виду, на пример CellRenderer? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Да, и на твои обработчики ListDataListener. Вообщем, все что может прямо или косвенно вызываться.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| seacat79 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 27.2.2007 Где: Украина, Одесса Репутация: нет Всего: 1 |
Выложи текст, который создает CellRender. Скорее всего, ты на каждый запрос генерируешь новый объект
|
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Есть такое дело, ну а как по другому в таком случае?
|
|||
|
||||
| seacat79 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 27.2.2007 Где: Украина, Одесса Репутация: нет Всего: 1 |
Попробуй сделать следующее:
PageStatusIcon icon = new PageStatusIcon()-> переносишь в класс PageListCellRenderer а вместо:
делаешь что-нибудь типа
|
||||||
|
|||||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Создаешь один компонент, когда вызывается getListCellRendererComponent() задаешь для этого компонента нужные свойства (цвет, текст, иконку и т.д.) и возвращаешь его. В самом методе ничего не создаешь. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
||||
|
||||
| seacat79 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 27.2.2007 Где: Украина, Одесса Репутация: нет Всего: 1 |
Разницы нет, кроме того, что: 1) Ты не знаешь когда будет вызван сборщик мусора, и уберет все объекты 2) Есть вероятность того, что сборщик не может удалить объект, так как на него есть ссылки из других объектов. (Покажи код PageStatusIcon) |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Это сообщение отредактировал(а) ShurikA - 27.2.2007, 13:45 |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Почему бы не активизировать лог gc (всего лишь добавить в командной строке параметр для JVM: -Xloggc:) и не посмотреть в динамике. Или в профайлере посмотреть, какие именно обьекты накапливаются. Утечка памяти - это не только OutOfMemory (это очень грубая ошибка проектирования). Проблема может быть также и в том, что gc будет убирать мусор, но вынужден будет включать FullGC, а это замораживает программу на некоторое время.
Это сообщение отредактировал(а) COVD - 27.2.2007, 16:08 |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Секунду, что то я, по моему не догоняю... PageListCellRenderer вызывается что бы определить внешний вид ячейки, а при fireContentsChanged эти ячейки просто перерисовываутся, не так ли? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
ListCellRenderer вызывается чтобы отрисовать одну ячейку (т.е. у него будет вызван метод paint()) fireContentsChanged() оповещает всех слушателей (в том числе и JList), что данные изменились. Если надо то JList произведет перерисовку изменившихся элементов. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |