Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

При закрывании окон не освобождается память
Список форумов
 ->  Swing, AWT & SWT


На страницу 1, 2  След. 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
KoV : 108
Новичок

СообщениеЯнв 31, 2012 18:53 
Ответить с цитатой
Добрый вечер! Я как-то раньше не обращал внимание на утечку памяти но сейчас когда открываю и закрываю одно и тоже окно несколько раз то занятая приложением память постоянно увеличивается и в итоге программа начинает жутко лагать.
Скажите кто знает, как при закрывании окна освобождать занятую им память?
_________________
Истина где-то рядом
К началу Посмотреть профиль Отправить личное сообщение Отправить e-mail
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 просто нет, то что же надо написать такое, чтобы память израсходовалась так быстро и система стала нестабильной, при этом исполнительная среда ничего не заметила (интересно, как?) и не начала сборку мусора? Ситуация немножко фантастическая. Скорей всего она связана с особенностями национального программирования Very Happy Поэтому лучше код посмотреть, чем говорить о чём-то.
К началу Посмотреть профиль Отправить личное сообщение
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, а не в блокноте или консоли - то там тем более это всё контролировать можно, рычаги имеются.

По коду, что выше:

Массивы - немножко устаревшая вещь, в новом коде лучше отказаться от них. Старый ладно, куда деваться, но этот кусок написан сегодня, так что Very Happy А вообще да, тут есть утечка. Но можно переписать так, чтобы её не было, и это не сложно Smile

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 стоит? Я в этом честно не виноват. Very Happy И ориентироваться на машины 5-летней давности в новых приложениях я просто смысла не вижу. В этом могу ошибаться.

Не я про массивы придумал, не я, понимаете? Господин Г. Шилдт писал об этом кучу раз. Что массивы нужны только для примеров, а для реальных приложений они даром не нужны никому и юзаются коллекции.

UPD Я сразу не подумал, сорри. В пример могу привести сеть торговых точек, где я подрабатываю. Там в нашем городе, в самом отсталом районе, считайте что уже на выезде с города, в торговом помещении стоят компьютеры с 2GB памяти и Windows 7 Pro. И это касса Very Happy Я молчу про сервера... О каких XP и 100Mb Вы говорите? Этого нет уже давно Very Happy А в столице и за границей, так можно даже не продолжать разговор. Да даже если взять наши же точки, только в центре города.
К началу Посмотреть профиль Отправить личное сообщение
Skipy : 4805
Я тут живу!
Откуда: Москва, Россия

СообщениеФев 01, 2012 17:51 
Ответить с цитатой
S.Dmitry писал(а):
Уметь использовать - согласен. Но 32 бита осталось только на нетбуках.


Вы в иллюзии.

Цитата:
Массивы - немножко устаревшая вещь, в новом коде лучше отказаться от них.


Э-э-э... Shocked Как бы это помягче... Первые 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 
Ответить с цитатой
Я и не спорю с тем, что могу ошибаться. И не спорю с тем, что ошибаются все. И если я не прав - то гораздо тактичнее привести аргумент, а не заниматься фаллометрикой. Very Happy
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 2
На страницу 1, 2  След.
Список форумов
 -> Swing, AWT & SWT


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru