LINUX.ORG.RU
ФорумTalks

Мысль о программировании на Java.


0

0

Настоящий программист на Perl может даже на Java написать программу на Perl. почти (c). Мысль появилась по результатам разглядывания результата борьбы со Swing. Swing -- зло. Особенно с нетривиальными дизайнами. А уж про нетривиальные действия... Чтение исходников JRE помогает, но даже там не всегда [за обозримое время] понятно почему не работает одно или другое. А всего-то хотелось запускать анимированные действия (исполняются таймером) с задержкой по таймеру. Теперь не могу понять, будет память утекать или нет от оставленных бесхозных остановленных таймеров-с-листенерами или нет.

★★★★★

Ответ на: Re: Мысль о программировании на Java. от HappyCoder

Re: Мысль о программировании на Java.

Пасиба, но мне рано ещё. Я на Java только пару месяцев как. Вообще, предпочитаю Perl и C++. До Ruby не добрался, не успел, загружаюсь по работе так, что просто некогда новый язык изучать, надо писать на чём-то подходящем, что уже и так хорошо знаю. За Java взялся, чтобы клиентское приложение написать, создателям Swing лучше не знать что я о них думаю.

Casus ★★★★★ ()

Re: Мысль о программировании на Java.

Память утекать не будет, конечно. Листенер - банальная ссылка на обьект сохранённая в таймере. Если на сам таймер ссылок не осталось - попрёт под говносборку. С памятью вообще можешь не париццо, если обьекты по полгига размером не создаёшь, разумеется.

WindozePlumber ()
Ответ на: Re: Мысль о программировании на Java. от AngryElf

Re: Мысль о программировании на Java.

.Net манагер памяти практически в любой ситуации рвёт сишный malloc/free как тузег тряпку. В жабо я не бог весть какой спец, но, уверен что там то же самое - судя по последним жабодокам что я читал они сделаны похоже.

WindozePlumber ()
Ответ на: Re: Мысль о программировании на Java. от WindozePlumber

Re: Мысль о программировании на Java.

С учётом того, что он его и использует, правда твоя, дядя, выглядит больше похожей на наглый гон и бред отмороженного альпиниста в свободном полёте.

Gharik ()
Ответ на: Re: Мысль о программировании на Java. от WindozePlumber

Re: Мысль о программировании на Java.

>.Net манагер памяти практически в любой ситуации рвёт сишный malloc/free как тузег тряпку.

в любых-любых??? О_о или его манагеру памяти сам святой дух память виделяет и потом какашки(garbage) за ним убирает?

не раз уже говорилось, что latency такого подхода есть немножко непредсказуемой(особенно когда манагер надумает мусор пособирать), по-этому использовать таки его (.НЭТ <или Жабу, если ты уже говришь, что там похожий принцип> с его манагером) где не попадя - не самое лучшее решение. (подробнее в топеге про си-плас-плас-оу-екс)

или я ошибаюсь? =)

zHACKa ()
Ответ на: Re: Мысль о программировании на Java. от zHACKa

Re: Мысль о программировании на Java.

выделение памяти в moving gc намного быстрее, он приятнее для кэша, latency в подавляющем большинстве приложений не важен, а когда он важен, можно отключать и запускать самому сборку (или вообще не использовать Java).

Legioner ★★★★★ ()
Ответ на: Re: Мысль о программировании на Java. от zHACKa

Re: Мысль о программировании на Java.

>ну собственно что я и имел в виду...

скорее не так... скорее "я согласен, но с оговоркой про лейтенси"

то, что для большинства приложений это (latency) не есть критичным - тоже правда, но все-равно есть системы, где использование Джава или .НЕТ нецелесообразно...

zHACKa ()
Ответ на: Re: Мысль о программировании на Java. от WindozePlumber

Re: Мысль о программировании на Java.

> Память утекать не будет, конечно.

Мне не очевидно. Я создаю объект, и сразу ссылку на него выбрасываю, но объект создаёт таймер и регистрируется в нём же. После положенного количества срабатываний, таймер останавливается. И мне не очевидно, что после остановки таймера можно как-то определить, что объект больше не нужен, и вообще не имеет больше возможности запуститься.

Casus ★★★★★ ()
Ответ на: Re: Мысль о программировании на Java. от Gharik

Re: Мысль о программировании на Java.

> С учётом того, что он его и использует

Он его не использует. Ознакомься с вопросом, прежде чем газ выпускть.

anonymous ()
Ответ на: Re: Мысль о программировании на Java. от Casus

Re: Мысль о программировании на Java.

> Мне не очевидно. Я создаю объект, и сразу ссылку на него выбрасываю, но объект создаёт таймер и регистрируется в нём же. После положенного количества срабатываний, таймер останавливается. И мне не очевидно, что после остановки таймера можно как-то определить, что объект больше не нужен, и вообще не имеет больше возможности запуститься.


Смотри, у тебя есть стек, есть куча. Есть ссылки которые лежат в данный момент в стеке (или стеках, в случае нескольких потоков), есть обьекты на которые они ссылаются, есть обьекты на которые ссылаются эти обьекты и т.п. по рекурсии. Все эти обьекты - это "reachable" - достижимые обьекты. Т.е. обьекты до которых ьы можешь дойти по ссылкам по цепочке, начиная со стека. Всё остальное - это "unreachable", т.е. потенциальный мусор. Поэтому у тебя обьект ссылается на таймер, таймер на обьект, но они оба на куче и на них больше никто не ссылается - поэтому, как бы они друг на друга не ссылались, они "unreachable".

WindozePlumber ()
Ответ на: Re: Мысль о программировании на Java. от Gharik

Re: Мысль о программировании на Java.

Манагер памяти выделяет кусок памяти под heap, устанавливает указатель "top" на его начало. Когда выделяется память под новый обьект, то указателю на обьект присваивается значение "top", а top увеличивается на размер обьекта. Выделение памяти по "new" происходит поэтому практически со скоростью выделения на стеке. Остаётся сборщик мусора. Но, сборщик мусора запускается только когда действительно это требуется (достигнут threshold по памяти) и работает в отдельном потоке с низким приоритетом - поэтому с большой вероятностью он будет работать, когда полезный код всё равно будет бездельничать (например ожидать на i/o). Отсюда и выигрыш в скорости.

WindozePlumber ()
Ответ на: Re: Мысль о программировании на Java. от WindozePlumber

Re: Мысль о программировании на Java.

> поэтому, как бы они друг на друга не ссылались, они "unreachable".

Мне это не очевидно. Сейчас поясню. Дело в том, что таймер у меня свинговский, а значит, он где-то внутри зарегистрирован. Разрегистрируется ли он по команде stop? У меня в том виде, как ты говоришь "unreachable", таймер срабатывает несколько раз, значит кто-то на него ссылается.

Casus ★★★★★ ()
Ответ на: Re: Мысль о программировании на Java. от Casus

Re: Мысль о программировании на Java.

> Дело в том, что таймер у меня свинговский, а значит, он где-то внутри зарегистрирован.


Ну, по большому счёту, с точки зрения управления памятью, тебя это не должно волновать. Если свинг ссылается на таймер, значит он считает что он ему нужен и таймер идти под GC не должен, если нет, то он может пойти под GC - утечки памяти не будет в любом случае. Листенер будет достижимым, пока достижим сам таймер - если тебя именно это смущает, то просто отцепи его когда он станет не нужен.

WindozePlumber ()
Ответ на: Re: Мысль о программировании на Java. от WindozePlumber

Re: Мысль о программировании на Java.

> Листенер будет достижимым, пока достижим сам таймер - если тебя именно это смущает, то просто отцепи его когда он станет не нужен.

Меня не то, чтобы смущает. У меня неявная циклическая зависимость (таймер содержится в объекте, на который ссылается листенер этого таймера) плюс регистрация таймера где-то внутри библиотек Java. И вот эта регистрация таймера, которой я не могу управлять, меня и смущает. Впрочем, возможно, что таймер действительно зарегистрирован только пока running, тогда я, наверное, зря беспокоюсь.

Casus ★★★★★ ()
Ответ на: Re: Мысль о программировании на Java. от WindozePlumber

Re: Мысль о программировании на Java.

Когда все это уже давным давно есть в нормальных языках, M$ выпускает только бету, и всякое быдло начинает писать как это круто и что это революционные технологии

anonymous ()
Ответ на: Re: Мысль о программировании на Java. от anonymous

Re: Мысль о программировании на Java.

Токмо все эти "нормальные языки" нахрен никому не нужны кроме очкастых доцентов-задротов. А C# практически везде уже мейнстримит как энтерпрайз-стандарт. :-D

WindozePlumber ()
Ответ на: Re: Мысль о программировании на Java. от anonymous

Re: Мысль о программировании на Java.

Через год-два оно уже только говно в бочке будет молотить. Сейчас даже Дойче Банкъ, у которого активов больше арбуза евро, всё на современную платформу дотНет переписывает. Ибо руль и мейнстрим. :-D :-D

WindozePlumber ()
Ответ на: Re: Мысль о программировании на Java. от WindozePlumber

Re: Мысль о программировании на Java.

>А C# практически везде уже мейнстримит как энтерпрайз-стандарт. :-D

Где-где мейстримит? В конторе "БЫков и братаны" Нижнего Мухосранска? Где три очкастых студента-зад... лабают в VStudio 2008, привезенном с Митино?

anonymous ()
Ответ на: Re: Мысль о программировании на Java. от Casus

Re: Мысль о программировании на Java.

Вообще, неиспользуемые блоки прослушивания - это один из анти-паттернов, приводящий именно к утечкам памяти. Если вам что-то неочевидно, то лучше читайте книги. Например, это описано в "Горький вкус Java".

Ian ★★ ()
Ответ на: Re: Мысль о программировании на Java. от Ian

Re: Мысль о программировании на Java.

> Вообще, неиспользуемые блоки прослушивания - это один из анти-паттернов

Можно пример? Особенно, под ситуацию с таймером интересно. Книжек у меня несколько есть, но там про это ничего не сказано, кроме того, что "мусор будет собран автоматически". "Горького вкуса Java" у меня нет.

Casus ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.