|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
KoV : 108 Новичок
|
Янв 31, 2012 18:53 |
|
|
Добрый вечер! Я как-то раньше не обращал внимание на утечку памяти но сейчас когда открываю и закрываю одно и тоже окно несколько раз то занятая приложением память постоянно увеличивается и в итоге программа начинает жутко лагать.
Скажите кто знает, как при закрывании окна освобождать занятую им память? _________________ Истина где-то рядом |
|
|
|
 |
S.Dmitry : 40 Новичок
|
Янв 31, 2012 19:05 |
|
|
Утечка памяти в Java немножко... не существующее понятие.
Всё зависит от кода. Как он написан. Его бы и глянуть.
Есть System.gc() для явного вызова сборщика мусора.
Но надо видеть, почему оно не собирается автоматически. |
|
|
|
 |
aleksandy : 1077 Завсегдатай
|
Фев 01, 2012 6:06 |
|
|
| KoV писал(а): |
| Скажите кто знает, как при закрывании окна освобождать занятую им память? |
Это?
| S.Dmitry писал(а): |
| Есть System.gc() для явного вызова сборщика мусора. |
Вызов System.gc() не гарантирует немедленного запуска сборщика, а лишь уведомляет jvm о отм, что неплохо было бы его запустить, но решение о запуске все равно принимает jvm. На самом деле, System.gc() создает больше проблем, чем приносит пользы. |
|
|
|
 |
S.Dmitry : 40 Новичок
|
Фев 01, 2012 11:05 |
|
|
Скорей всего он всё же будет вызван, если есть что собирать. Это можно проверить. Посмотреть список свободной и доступной памяти. Гарантии никто дать не может, но если очень хочется, то никто не запрещает.
Я немножко не понимаю, почему это стало такой проблемой. Ведь в случае нехватки памяти, сборка должна происходить автоматически? А учитывая, что на современных машинах меньше 4 GB просто нет, то что же надо написать такое, чтобы память израсходовалась так быстро и система стала нестабильной, при этом исполнительная среда ничего не заметила (интересно, как?) и не начала сборку мусора? Ситуация немножко фантастическая. Скорей всего она связана с особенностями национального программирования Поэтому лучше код посмотреть, чем говорить о чём-то. |
|
|
|
 |
Skipy : 4805 Я тут живу! Откуда: Москва, Россия
|
Фев 01, 2012 11:57 |
|
|
| S.Dmitry писал(а): |
Утечка памяти в Java немножко... не существующее понятие.
|
Утечка памяти в Java - это реальность. Надо ее просто не освобождать. Например, не обнулять жесткие ссылки. Ищутся утечки анализом кучи.
P.S. А иногда и не поймешь, что есть утечка. Вот, например, код:
| Код: |
package ru.skipy.tests;
import java.util.ArrayList;
import java.util.List;
/**
* MemoryLeakTest
*
* @author Eugene Matyushkin aka Skipy
* @since 01.02.12
*/
public class MemoryLeakTest {
private byte[] data;
private SomeListener listener;
public MemoryLeakTest(){
data = new byte[16384];
listener = new SomeListener();
}
public SomeListener getSomeListener(){
return listener;
}
public class SomeListener{
public void onMessage(){}
}
public static void main(String[] args) {
List<SomeListener> listeners = new ArrayList<>(100);
for (int i=0; i<100; i++){
listeners.add(new MemoryLeakTest().getSomeListener());
}
}
} |
В этом примере утекло не менее 1.6Мб. Хотя, казалось бы - твердые ссылки на MemoryLeakTest отсутствуют как класс, а используются только экземпляры внутренних классов. А о том, что экземпляры этих самых внутренних классов неявно держат ссылку на внешний - не задумываются, пока не клюнет жаренный петух. _________________ С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других! |
|
|
|
 |
Skipy : 4805 Я тут живу! Откуда: Москва, Россия
|
Фев 01, 2012 12:03 |
|
|
| S.Dmitry писал(а): |
| А учитывая, что на современных машинах меньше 4 GB просто нет |
Ее еще надо уметь использовать. На 32-битной системе танцами с бубном можно добиться использования 1.5Гб, не больше.
| Цитата: |
| то что же надо написать такое, чтобы память израсходовалась так быстро и система стала нестабильной, при этом исполнительная среда ничего не заметила (интересно, как?) и не начала сборку мусора? |
Если приложению выделено 256Мб (а иногда бывает и 64!), то ничего особенного писать не надо. Надо просто не освободить несколько раз выделенные ресурсы. А тормоза начинаются именно потому, что система запускает сборку, а собрать ничего не может - память утекла. _________________ С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других! |
|
|
|
 |
S.Dmitry : 40 Новичок
|
Фев 01, 2012 12:09 |
|
|
Уметь использовать - согласен. Но 32 бита осталось только на нетбуках. Ну да ладно. Сейчас не о том речь.
Сколько чего выделено - это можно контролировать путём настройки виртуальной машины. Если писать в IDE, а не в блокноте или консоли - то там тем более это всё контролировать можно, рычаги имеются.
По коду, что выше:
Массивы - немножко устаревшая вещь, в новом коде лучше отказаться от них. Старый ладно, куда деваться, но этот кусок написан сегодня, так что А вообще да, тут есть утечка. Но можно переписать так, чтобы её не было, и это не сложно
UPD, и опять же, мы пришли к выводу, что только увидев код можно решить проблему. А пока мы никак не узнаем об утечке автора. |
|
|
|
 |
ТокиТори : 1079 Завсегдатай
|
Фев 01, 2012 12:35 |
|
|
| S.Dmitry писал(а): |
| Уметь использовать - согласен. Но 32 бита осталось только на нетбуках. |
Вы, наверное, из столицы, да? У нас в глубинке многие сидят еще на 32-битной XP с 2ГБ памяти, в т.ч. все 7 человек из моего офиса. При разработке ПО уделяйте хоть каплю внимая на потребление ресурсов. Моим десктопным приложениям хватает с головой 100МБ памяти.
| S.Dmitry писал(а): |
| Массивы - немножко устаревшая вещь, в новом коде лучше отказаться от них. |
Абсолютный бред. |
|
|
|
 |
S.Dmitry : 40 Новичок
|
Фев 01, 2012 12:44 |
|
|
Нет, я к счастью (не жил в Дефолт-сити, поэтому может и к сожалению), из провинции. Ну как, среди провинций столица. Воронеж. У нас так. Ну что я поделаю, если память стала дешёвая и на машинах новех 3 лет везде ставят 4 гига, а на не самых дорогих и уже давно не новых нетбуках уже 2 стоит? Я в этом честно не виноват. И ориентироваться на машины 5-летней давности в новых приложениях я просто смысла не вижу. В этом могу ошибаться.
Не я про массивы придумал, не я, понимаете? Господин Г. Шилдт писал об этом кучу раз. Что массивы нужны только для примеров, а для реальных приложений они даром не нужны никому и юзаются коллекции.
UPD Я сразу не подумал, сорри. В пример могу привести сеть торговых точек, где я подрабатываю. Там в нашем городе, в самом отсталом районе, считайте что уже на выезде с города, в торговом помещении стоят компьютеры с 2GB памяти и Windows 7 Pro. И это касса Я молчу про сервера... О каких XP и 100Mb Вы говорите? Этого нет уже давно А в столице и за границей, так можно даже не продолжать разговор. Да даже если взять наши же точки, только в центре города. |
|
|
|
 |
Skipy : 4805 Я тут живу! Откуда: Москва, Россия
|
Фев 01, 2012 17:51 |
|
|
| S.Dmitry писал(а): |
| Уметь использовать - согласен. Но 32 бита осталось только на нетбуках. |
Вы в иллюзии.
| Цитата: |
| Массивы - немножко устаревшая вещь, в новом коде лучше отказаться от них. |
Э-э-э... Как бы это помягче... Первые 10 нецензурных реплик отфильтровал. Спрошу вот так: какой у Вас опыт разработки? _________________ С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других! |
|
|
|
 |
Skipy : 4805 Я тут живу! Откуда: Москва, Россия
|
Фев 01, 2012 17:54 |
|
|
| S.Dmitry писал(а): |
| Не я про массивы придумал, не я, понимаете? Господин Г. Шилдт писал об этом кучу раз. Что массивы нужны только для примеров, а для реальных приложений они даром не нужны никому и юзаются коллекции. |
А гопник Вася кучу раз писал на заборе известное слово из трех букв. А как ни глянь - ну ни разу ЭТОГО за забором не было. То стройка, то дрова...
Прочитайте из двоичного файла данные, используя коллекции, и мы с Вами продолжим эту увлекательную дискуссию. А пока Вы это не сделали, просто поверьте профессиональному Java-разработчику с пятнадцатилетним опытом - массивы не устарели и не устареют в обозримом будущем.
P.S. Не нужно слепо верить писателям книг, кои в подавляющем большинстве случаев не разработчики, а популяризаторы. _________________ С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других!
Последний раз редактировалось: Skipy (Фев 01, 2012 18:00), всего редактировалось 1 раз |
|
|
|
 |
S.Dmitry : 40 Новичок
|
Фев 01, 2012 17:55 |
|
|
В данном случае речь не о моей неприязни к массивам, а в том, что в части книг они были признаны "не рекомендованными к использованию". Своего мнения я не говорил.
Поэтому фаллометрика типа "у меня опыт больше" меня не интересует. Я говорю мнения людей которые издавали книги, которые продавались большим тиражом. => эти авторы уже авторитетны. Ваших изданий я не видел. И на заборе, и в интернете.
При этом на личности я пока не перешёл.
Да, используется и то, и то. Я с этим и не спорил. |
|
|
|
 |
S.Dmitry : 40 Новичок
|
Фев 01, 2012 18:01 |
|
|
| Скажем так, гопник Вася и господин Шилдт - это разные люди. Пока Ваших книг я не увидел и Ваших творений тоже. Шилдт - уважаемый и компетентный человек, поэтому сравнивать его с гопником Васей глупо. Его книги продаются и читаются. А его мнение авторитетно. Ваш же авторитет ни кем не подтверждён. И Вы врят ли известны на весь мир, как он. Поэтому своё мнение - это отлично. Но на корню рубить мнение таких людей, думаю, не стоит. Все люди в чём-то правы, а в чём-то нет. Только когда менее известный человек сравнивает с г**ом более известного человека (имеем ввиду тут его мнение) - это смотрится со стороны как поведение человека из менее урбанизированного района (гопника, в принципе). |
|
|
|
 |
Skipy : 4805 Я тут живу! Откуда: Москва, Россия
|
Фев 01, 2012 18:07 |
|
|
| S.Dmitry писал(а): |
| Я говорю мнения людей которые издавали книги, которые продавались большим тиражом. => эти авторы уже авторитетны. |
Вы себе не представляете, сколько издано разнообразного бреда. И раскупаемого бреда. А самые большие тиражи - у бульварной литературы. Она не имеет большого отношения к реальности. Но пипл хавает с удовольствием.
"Авторитетные" люди иногда несут такое, что волосы дыбом встают, причем в подмышках. Один "гуру" заявил, что checked exceptions в java - ошибка. В качестве аргумента он привел фактическую ситуацию - разработчики их ленятся обрабатывать, везде ставят throws Exception и catch Exception. Так что лучше бы их совсем не надо было обрабатывать. Феерический бред. Для меня он после этого потерял всякий авторитет.
| Цитата: |
| Ваших изданий я не видел. И на заборе, и в интернете. |
А я их не скрываю. Ссылка в подписи. _________________ С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других! |
|
|
|
 |
S.Dmitry : 40 Новичок
|
Фев 01, 2012 18:10 |
|
|
Я и не спорю с тем, что могу ошибаться. И не спорю с тем, что ошибаются все. И если я не прав - то гораздо тактичнее привести аргумент, а не заниматься фаллометрикой.  |
|
|
|
 |
|
|
Страница 1 из 2 На страницу 1, 2 След. |
Список форумов
-> Swing, AWT & SWT |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|