LINUX.ORG.RU

ЖАБА съела мою память!

 , , , ,


0

0

Здравствуйте, объясните мне, почему любое приложение на этом языке протекает? Вот запускаешь ты его, сразу 400 уходит, хотя там 100 за глаза, ну ладно. Через пару часов это уже 4000 (при этом всё работает нормально). Но далее закономерно начитаются проблемы, даже если памяти избыток.

В частности, это касается игрушек, Runescape там, Wakfu и остальное. В определённый момент, всё начинает сильно, всё сильнее и сильнее, подвисать, тормозить и зависать. Причём, никакие игры с ключами, ограничениями памяти, переключениями режимов GC и прочим таким, ни к чему не приводят — становится только хуже. Например, можно начинать с самого начала: сделать чтобы GC приходил почаще и вёл себя агрессивней. Подфриживания будут чаще и с самого начала, но при этом памяти хватит на дольше (вроде бы). Это продолжается уже много-много лет. Неужели это происходит только у меня и никто этого не видит?

И попутно, у оракловской сборочки есть панель управления приложениями с профайлером и прочими ништяками, можно ли иметь что-нибудь похожее для openjdk? Мне она не нужна, просто интересно.



Последнее исправление: linuxnewbie (всего исправлений: 2)
Ответ на: комментарий от crutch_master

Ну хз. Я вообще не понимаю зачем она может быть нужна без рефлексии/аннотаций.

В те времена вместо аннотаций используемых для compile time процессинга использовали специально оформленные комменты javadoc. Рефлексия была всегда.

ИМХО жаба была тем чем стал go сейчас, простым языком который показывал хорошую производительность в сравнении с ruby и python. В нем не было не только аннотаций но и дженериков, зато был кросплатформенный UI. Но Джеймс Гослинг в жабе видел язык для смартфонов, о чем даже есть видеопрезентация 92 года.

Aber ★★★★★
()
Последнее исправление: Aber (всего исправлений: 2)
Ответ на: комментарий от Aber

ИМХО жаба была тем чем стал go сейчас

И нафига было это терять?

Legioner ★★★★★
()
Ответ на: комментарий от crutch_master

что единственная причина провала жабы - это потому что в ней нужно было возиться с доступом к файлам? Не тормоза, не жор памяти?

Да. Чтобы флеш работал надо его просто поставить, а с жабой всегда надо было плясать. Причём редкие игры на жаба-апплетах работали лучше ибо там можно было приделать нормальный натив типа lwjgl, а у флеша там только вм и всё ужасно тормозило в более-менее ресурсожорких играх.

Секунду. Претензия была к большим возможностям, а не к трудностям запуска-установки. Так-то и флеш можно было сделать труднозапускаемым, и он тоже бы провалился.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Претензия была к большим возможностям, а не к трудностям запуска-установки. Так-то и флеш можно было сделать труднозапускаемым, и он тоже бы провалился.

Путаешь причину со следствием. Трудности это следствие возможностей. Апплет может поломать локальную систему -> трудности с доверием к апплету. Возможность запуска апплета на разных версиях джавы -> у кого-то обязательно будет устаревшая явамашина в браузере. Сейчас мы не выбираем версию джаваскрипта для браузера - красота же и только.

Kokonavtuz
()
Ответ на: комментарий от Kokonavtuz

Проблемы с апплетами были по ряду причин.

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

Во-вторых жава работала в песочнице и эта песочница была жутко дырявой, дыры находили сотнями. Распространение вирусов через жаву было популярной темой. Поэтому браузеры в какой-то момент начали требовать конфирм, иначе это просто не вариант, у миллионов юзеров жава по какой-то причине не обновлена, даже у тех, которых обновлена, всё равно имеет кучу дырок, вирусы лезут просто без всяких шансов. Это как сейчас вирус в жаваскрипт. Но такое редкость и нонсенс, а тогда было обычное дело.

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

В-четвёртых интеграция жавы с браузером оставляла желать лучшего и очень часто что-то не работало. Тот же флеш работал всегда. Жава - нет. У обычных юзеров работа с сайтом требующим жаву это всегда трындец. Те, кто сталкивался с поддержкой таких юзеров, это хорошо знают.

В общем по всем этим причинам жава и не взлетела. Не всё там так уж просто было.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

А зачем тебе аннотации? Совершенно ненужная и даже вредная фича.

Чем она вредная? В спринге можно просто поставить @value и легко получить параметр из конфига, например.

crutch_master ★★★★★
()
Ответ на: комментарий от byko3y

Зачем адобе в одно рыло заниматься разработкой этой closed-source дряни, если можно вообще не заниматься ею?

Хз. Вендорлок какой-нибудь, потенциальное пропихивания флеша везде где можно, продажа devtools и т.д. Зачем ракл жабу развивает и MS dotnet?

Что я делаю не так?

Так там их и не будет. Аннотации это для более высокого уровня типа настройки поведения каких-то крупных компонентов и скатывание всего в подобие декларативщины. Простой библиотеке куда их там впихнешь.

crutch_master ★★★★★
()
Ответ на: комментарий от byko3y

В те времена вместо аннотаций используемых для compile time процессинга использовали специально оформленные комменты javadoc

Ну вот. Теперь я чувствую себя не crutch master'ом, а просто позером.

crutch_master ★★★★★
()
Ответ на: комментарий от byko3y

Секунду. Претензия была к большим возможностям, а не к трудностям запуска-установки.

Так второе вытекает из первого. Апплеты были слишком опасны и намного опаснее, чем флеш. Поэтому браузеростроители втыкали везде больше и больше палок, чтобы юзеры не самоубились. Да, если флеш так блочили бы, его бы тоже слили, но к тому времени уже много всякого дерьма было на нём (типа ютуба) и избавиться было не так просто. Потом пришёл html5.

crutch_master ★★★★★
()
Ответ на: комментарий от Legioner

Чтобы его вызвать нужно его сначала сделать, а потом как-то засунуть в вызываемый класс. Все это просто скидывается на фреймворк. Если делать что-то своё, то тоже есть много маневров с рефлескией и аннотированными методами, типа создания обработчиков для сетевых запросов, кнопок и т.д. Еще делают всякие @Null для проверки NPE, много можно чего придумать, только в этом не много смысла. JS скатить в декалративщину намного проще и удобнее, кмк, а тут будешь сидеть сразу на тех самых двух стульях, на одном из которых пики.

crutch_master ★★★★★
()
Ответ на: комментарий от Aber

жаба была тем чем стал go сейчас, простым языком который показывал хорошую производительность в сравнении с ruby и python. В нем не было не только аннотаций но и дженериков, зато был кросплатформенный UI. Но Джеймс Гослинг в жабе видел язык для смартфонов, о чем даже есть видеопрезентация 92 года.

Вот именно - кроссплатформенный язычок. Go такой же кроссплатформенный, как С. Это скорее наоборот, Java скатилась до состояния Go, а людишек из гугля настолько достали оставшиеся еще с прошлого века проблемы Java и JVM, что они просто взяли и сделали собственную модификацию без виртуальной машины, но с покером и куртизанками, то есть, с компиляцией в машинный код, горутинами, и CSP-параллелизацией.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Потому идет такой интенсивный переход от JS - он неудобен во многих планах, и проблемы с типами являются главным камнем преткновения.

Проблема не в типах, а в привычке писать на фортране на любом яп. Другими словами ссать против ветра. В JS не надо пытаться что-то типизировать также, как в яве нужды другие подходы.

crutch_master ★★★★★
()
Ответ на: комментарий от Kokonavtuz

Апплет может поломать локальную систему -> трудности с доверием к апплету.

И чо? А флеш ведь тоже хранит файлы на диске. Но почему-то адоба смогла, а сан - не смог. Адоб ведь тоже мог сделать сертификаты для активации прав доступа к локальному диску, и так далее.

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

А типа с флешем такой проблемы не было? Была, конечно, тоже. Думаем дальше.

byko3y ★★★★
()

У меня кстати ещё жабе плохеет когда на диске с кэшами кончается место, это тоже кодеры недальновидные или так и задумано? Причём серьзно так плохеет, будет сыпать страшными ошибками вроде разыменовывания null пока не убьёшь вручную. Кде тоже плохеет, только по-моему когда место в tmp кончается всё крашится, в хомяке не так фатально.

Просто никогда такого не было, только с жабой. В другой раз браузер видимо не смог записать сессию и потерял её, и ещё раз было предложил загрузить восстановленную.

linuxnewbie
() автор топика
Ответ на: комментарий от linuxnewbie

У меня кстати ещё жабе плохеет когда на диске с кэшами кончается место

С какими кешами? Свопом что-ли? Так это само собой. Системе не только от жабы поплохеет.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Хз. Вендорлок какой-нибудь, потенциальное пропихивания флеша везде где можно, продажа devtools и т.д. Зачем ракл жабу развивает и MS dotnet?

Блин, ты что, с историей не знаком? Флеш - это клиент для продукции, сделанной в платных инструментах разработки Adobe. Сан и Оракл жаву коммерциализировали, смотри выше про Java EE. Microsoft-у еще больше нужен .NET для продвижения совсем других вещей.
Но разговор был совсем про другое: почему жаба соснула, а флеш - нет. Да, флеш недавно ушел, но жаба не приходила никогда.

Аннотации это для более высокого уровня типа настройки поведения каких-то крупных компонентов и скатывание всего в подобие декларативщины

Все задачи аннотаций можно выполнить без аннотаций. Я напомню, что ты писал в духе «не знаю, зачем жава нужна без аннотаций».

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Зачем это адобу делать сертификаты для активации прав, когда надо было права выпиливать? На коне оказался js, который вообще без прав.

Устаревший флеш? - а разве это проблема?

Kokonavtuz
()
Ответ на: комментарий от crutch_master

Апплеты были слишком опасны и намного опаснее, чем флеш. Поэтому браузеростроители втыкали везде больше и больше палок, чтобы юзеры не самоубились. Да, если флеш так блочили бы, его бы тоже слили, но к тому времени уже много всякого дерьма было на нём (типа ютуба) и избавиться было не так просто.

Опять не отвечает на вопрос «почему флеш взлетел, а жава-аплеты - нет». Уязвимости были и там, и там.

byko3y ★★★★
()

Да все разрабы, кто пишет на жабе жалуются, что писать без утечек тяжело, особенно MVC приложухи, когда ссылки на объекты/инстансы зацикливаются и оба объекта не убиваются GC, оставаясь типа нужными. И таких «нужных» перед смертью твоей Java VM остаётся десятки миллионов.

menangen ★★★★★
()
Ответ на: комментарий от menangen

? первый раз слышу, описанная проблема существует у ARC а не GC.

Aber ★★★★★
()
Ответ на: комментарий от crutch_master

Проблема не в типах, а в привычке писать на фортране на любом яп. Другими словами ссать против ветра. В JS не надо пытаться что-то типизировать также, как в яве нужды другие подходы.

Есть замечательные варианты динамически типизированных языков, у которых система типов намного, намного лучше, чем у JS. Например, та же Clojure. Тут как бы не в фортране дело.

byko3y ★★★★
()
Ответ на: комментарий от Kokonavtuz

Зачем это адобу делать сертификаты для активации прав, когда надо было права выпиливать? На коне оказался js, который вообще без прав.

Так и жаве нужно было права выпиливать.
JS оказался на коне потому, что он напрямую оперирует DOM-ом браузера, а не является сторонней программой.

Устаревший флеш? - а разве это проблема?

Ну при достаточно тяжелых флешках - да. Конечно, каким-то магическим образом у флеша проблем с совместимостью не было, а у жавы - были.

byko3y ★★★★
()
Ответ на: комментарий от crutch_master

Не, там docfetcher. Если хотите, можете исправить — вроде как опенсорс, а альтернатив и не видно. Кто бы мог подумать что несколько десятков гигабайт места на диске не хватит для какой-то тысчёнки другой текстовых файлов (а в виндоус оно так вообще системный диск загаживает). В общем, спецэффекты у этой программы интересные.

linuxnewbie
() автор топика
Ответ на: комментарий от byko3y

Конечно, каким-то магическим образом у флеша проблем с совместимостью не было, а у жавы - были.

Ничего не знаю про это, но скажем флеш игры сразу загружали анимацию и дальше лениво подргужал все остальное, а на жабе я пробовал делать апплеты, все очень было сложно Graphics2D g = (Graphics2D) getGraphics() и дальше рисование вектором которое медленное, надо было рисовать на спрайты, чтоб лишний раз не перерисовывать, результат рисовать во внеэкранное изображение, т.е. чтоб не мерцало организовать двойную буферизацию, мне кажется с flash все было значительно проще.

Aber ★★★★★
()
Ответ на: комментарий от crutch_master

Все задачи аннотаций можно выполнить без аннотаций

Да. Конфигами на xml, что не нужно еще больше.

Жабокодеры тупо не умеют писать очевидный код без сраной магии. Заставь его выкинуть аннотации, так он xml притащит с автоподгрузкой по хттп.

anonymous
()
Ответ на: комментарий от anonymous

Жабокодеры тупо не умеют писать очевидный код без сраной магии.

Ну нету там достаточного набора абстракций в языке, не получается очевидный код. Тогда это не жаба должна быть, а либо очень сложный язык, либо lisp.

Aber ★★★★★
()

Ванильный майнкрафт сжирает до 6+ гиг памяти и выше на жЫрних серверах со временем.

FiXer ★★☆☆☆
()
Ответ на: комментарий от Kokonavtuz

ну-ка, ну-ка, расскажи про типизацию в кложескрипте, очень интересно послушать

(+ (foo 1) "a")

WARNING: cljs.core/+, all arguments must be numbers, got [number string] instead

Пойдет? Да, там просачивается кривая типизация из JS, и упомянутый мной код заработает несмотря на предупреждение, но например, операции сравнения в ClojureScript строгие. Грубо говоря, ClojureScript ограничивает возможности кодера в использовании кривых инструментов JS, давая взамен более годные инструменты на этой ограниченной базе JS.

byko3y ★★★★
()
Ответ на: комментарий от FiXer

У меня была ещё gamedevtycoon (не берите), так та тоже текла. Но как-то более сдержанно что ли, хотя 3+ гигабайта нетекало за несколько часов. Но то не ММО, в принципе пофиг. Тут же буквально за минуты вся память кончается.

linuxnewbie
() автор топика
Ответ на: комментарий от byko3y
Clojure 1.10.0
user=> (= 2 2.0)
false

cljs.user=> (= 2 2.0)
true

Не просачивается, а ты и пишешь на обертке js. Я хотел услышать про классную типизацию в языке без классов для платформы где классы ненужны. Инструменты многие годные, тут да. Но слишком многие восхваляют типы или критикуют ни за что. А это тоже просто инструмент

Kokonavtuz
()
Ответ на: комментарий от byko3y

Опять не отвечает на вопрос «почему флеш взлетел, а жава-аплеты - нет». Уязвимости были и там, и там.

Дыры дырам рознь. Во флеше были шели, а апплеты - это дверь без стен воокруг.

crutch_master ★★★★★
()
Ответ на: комментарий от anonymous

Жабокодеры тупо не умеют писать очевидный код без сраной магии

Абстракцию как нормально сделать на оопоте и чтобы всё рефакторилось? Знаешь? Выпускай книжку озолотишься. Многие уже подгорели от оопоты.

crutch_master ★★★★★
()
Ответ на: комментарий от byko3y

кривых инструментов JS

Кодер в сумматор чисел суёт строки, а виноват js. Да он не бьет по рукам, но это так и задумано же. Не надо путать java и javascript. Это 2 совершенно разных языка. Что там и там написано «java» - это вообще ни о чём не говорит.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Абстракцию как нормально сделать на оопоте и чтобы всё рефакторилось? Знаешь?

Знаю. Абстрактная абстракция ради абстракции должна быть конкретно выкинута нахуй и куча абстрактных проблем отвалится сама собой.

anonymous
()
Ответ на: комментарий от Kokonavtuz

Не просачивается, а ты и пишешь на обертке js. Я хотел услышать про классную типизацию в языке без классов для платформы где классы ненужны. Инструменты многие годные, тут да. Но слишком многие восхваляют типы или критикуют ни за что. А это тоже просто инструмент

Блин, ну там обертка размером с сам JS. Скорее JS здесь - это байтмашина, которая задает примитивные операции.
Прежде всего: объект = замыкание. Многие не так давно любили говорить про присоединение функций к данным в объектах, но ведь присоединение данных к функциям делает то же самое, особенно учитывая, что в лиспе данные и функции являются одними и теми же S-выражениями.
Ты правильно заметил, что в JS классов просто нету, вместо этого есть функции, хэш-таблицы (объекты), и скромный набор примитивных типов (число, строка, etc). Я ни в коем случае не отрицаю, что это очень удобное устройство языка... если тебе нужно написать максимум 10 строчек кода. Если же у тебя большой проект, то структурировать его на JS будет сложно - этот эффект придется достигать самодисциплиной и комментариями. К этому аппелируют многие фанаты JS - мол, чистота, неизменяемые данные, и ленивые вычисления можно делать на этом языке прямыми руками. Да, можно. На намного проще и приятнее на этом языке писать глючный нечитаемый код, учитывая обязательную необходимость знать все неочевидные моменты реализации JS типа «сюда не ходи, а то снег на башка упадет», как то знаменитый NaN.
В противовес этому лисп дает формальную дисциплину и выраженное структурирование. Взять даже элементарное различие кейвордов и строк в clojure - в JS ведь смешали всё в кучу, и все три строчки делают одно и то же:

o.key
o["key"]
k="key"; o[k]
Это уже не просто динамичность, это бардак и шизофрения, что неудивительно, поскольку JS делали разные люди с разными намерениями, и каждый просто докидывал в общую кучу новых фич, не парясь о том, как на этом потом будут люди писать.
Лисп же целостен, и если у тебя массив (вектор), то у тебя массив и всё тут, а не объект типа array, к которому ты в итоге как хочешь можешь обращаться, вроде
a=Array(1,2,3); a[1] = 1; a.key = "asd";
b=new Array(1,2,3); b[1] = 1; b.key = "asd";
c=[1,2,3]; c[1] = 1; c.key = "asd";
Все три дают конечное значение «[ 1, 1, 3, key: 'asd' ]», но не полностью равнозначны, а имеют свои тонкие особенности поведения.

byko3y ★★★★
()
Ответ на: комментарий от crutch_master

Посмотри на ынтерпрайз. Там сплошной спрингбут, гибернейт и аннотации. Как бы нет, но выходит, что да.

Угу?
http://www.beabetterdeveloper.com/2013/12/an-annotation-nightmare.html

@XmlElementWrapper(name="orders")
@XmlJavaTypeAdapter(OrderJaxbAdapter.class)
@XmlElements({
   @XmlElement(name="order_2",type=Order2.class),
   @XmlElement(name="old_order",type=OldOrder.class)
})
@JsonIgnore
@JsonProperty
@NotNull
@ManyToMany
@Fetch(FetchMode.SUBSELECT)
@JoinTable(
    name = "customer_order",
    joinColumns = {
        @JoinColumn(name = "customer_id", referencedColumnName = "id")
    },
    inverseJoinColumns = {
        @JoinColumn(name = "order_id", referencedColumnName = "id")
    }
)
private List orders;
Как бы это до маразма доходит порой.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Угу?

Да, оно. Но это еще лайтовый вариант.

Как бы это до маразма доходит порой.

Ну а что им делать? Или всё пихать на сущность, которую используют все или размазывать эту сущность отдельно по XML/JSON/SQL парсерам/генеарторам.

crutch_master ★★★★★
()
Ответ на: комментарий от byko3y

Я ни в коем случае не отрицаю, что это очень удобное устройство языка... если тебе нужно написать максимум 10 строчек кода.

А нужно ли писать сильно больше, чем 1-2к строчек, без учёта модулей?

crutch_master ★★★★★
()
Ответ на: комментарий от byko3y

Вот чего Java, как язык, не экономит - так это времени разработки. Язык перегружен определениями, а статическая типизация и общепринятые приемы построения иерархии классов мешают расширять и переделывать имеющийся софт.
Ведь такой ублюдочное по своей сути явление, как инструментальный рефакторинг, выросло именно из-за того, что в жаве нельзя рефакторить руками.

Откуда ты ЭТО взял?!

Рефакторингом (улучшением) кода занимались со времён изобретения FORTRAN'а, если был доступен терминал для ручного набивания новых перфокарт.

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 2)
Ответ на: комментарий от iZEN

Рефакторингом (улучшением) кода занимались со времён изобретения FORTRAN'а, если был доступен терминал для ручного набивания новых перфокарт.

Ну я же написал «инструментальный рефакторинг». То есть, когда компьютер за тебя делает рефакторинг твоего кода. Здесь возникает вопрос: почему компьютер не может про себя разбираться со своими конструкциями, не посвящая человека в свои операции, и не оставит человеку человеческие интерфейсы?

byko3y ★★★★
()
Ответ на: комментарий от crutch_master

Ну а что им делать? Или всё пихать на сущность, которую используют все или размазывать эту сущность отдельно по XML/JSON/SQL парсерам/генеарторам.

IMHO, сорта говна. Я не понимаю, почему остальные языки прекрасно обходятся без такого кол-ва бесполезных конструкций, а жаберам они обязательно нужны. Да, собсна, и жаберы некоторые тоже прекрасно обходятся без аннотаций.
Вот самый перекомментированный модуль из состава kubernetes, и то разрабам пришлось оставить большое объяснение причины и просьбу не чистить модуль:
https://github.com/kubernetes/kubernetes/blob/ec2e767e59395376fa191d7c56a74f5...
Это в тему того, что го вырос заменой жабе. По сравнению с рядовым проектиком на спринге это просто детский сад. Серьезно, я не понимаю, зачем жаберам нужно столько метакода, когда 1 строчка кода - 5 строчек аннотаций и прочих объявлений.
Такое ощущение, что они провозили метакод контрабандой под видом исходников.

byko3y ★★★★
()
Ответ на: комментарий от crutch_master

А нужно ли писать сильно больше, чем 1-2к строчек, без учёта модулей?

Нет, если ты пишешь небольшую динамическую страничку для браузера.
На самом деле на ноде бы ничего большого не писали, и никаких сервисов толковых бы на ней не было, но просто помогли хайп mongoDB и докера на фоне избытка JS-индусов, пришедших в свою очередь с хайпов Java-jQuery-WEB 2.0-REST. У коммерсов внезапно возникли инструменты, дающие шанс трудоустраивать JS-макак и продолжать держать их даже когда проект уже давно перерос индусотехнологии. Проект разбивается на мелкие проекты по 1-2к строчек, и потом девОбез собирает эту мозаику методом тыка. При этом все проблемы структурирования данных решаются отсутствием этой самой структуры, для чего нам обязательна монга. Потом поверх этой структуры натягивается оркестратор, и вуаля - я у мамы бигдата.
По крайней мере это хоть как-то оправдывает докерастов, и позволяет им сидеть на своих раб местах - не важно, что весь проект могли делать два человека, зато этим двум человекам пришлось бы много платить, а тут макак нанял, поставил senior макаку над ними - вуаля, ты получил систему из взаимозаменяемых деталей как на программном, так и на кадровом уровне.

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