Угу. Это красиво в теории. Но на практике это встречается не так уж редко. (Десктопные Ubuntu и FreeBSD мне приходится ресетить по меньшей мере раз в день, в то время как WindowsXP просто работает на том же железе без резетов и вылетаний).
Господи, что ж вы с ними делаете то?Ресет чтоли жмете или на глючном железе запускаете?Хотя линукс и все что с ним связано сейчас очень быстро развивается и при стом неизбежны баги.Да и в той же винде багов предостаточно.Как впрочем и в абсолютно любой сколь-нибудь сложной системе.Просто в некоторых системах их еще не нашли а в некоторых уже нашли
.
Так почему же на системном (позволяющим многое и требующем большей квалификации) языке пишутсс большие прикладные вещи?
Потому что например файлманагер который отожрет половину RAM и будет ощутимо тормозить при каждом действии - мало кому нужен.Про собственно систему и т.п. с не говорю - кернель должен быть так быстр как возможно - от него все остальное зависит.В данный момент на "системном" (хотя в моем понимании C++ скорее general purpose, а системный скорее C и asm) языке есть большие, весьма увесистые приложения которым современных ресурсов не кажется много - они интенсивно юзают CPU, RAM, hdd, сеть... .Если переписать их на Java ... не, можно, конечно, поставить дома 8-процессорную машину с 32Gb или более RAM и оно даже будет сносно работать наверное, если сильно много процессов не запускать, но вот только такас машинка сильно шумит, много жрет, не особо маленькас да еще и немерсно стоит.Шло б оно лесом, а?
Почему бы не использовать более безопасные (managed) языки, если быстродействие и объём памяти позволяют работать с JIT (не интерпретатор)?
Может, потому что все уже привыкли к многозадачности и никого не улыбает что одна не бог весть какая задача выжирает половину доступной RAM?Лично с стараюсь не использовать Java и\или .NET приложения.Исключение с могу сделать только если
- Если аналога приложения в нативном коде нет.Честно говоря, такое больше характерно для мобилок.Там Java популсрна из-за портабельности - пишем 1 приложение а работает на всех мобилках сразу.Что у них там разнас архитектура и софт - пофиг.Реально правда, производители мобил умудрились плюсы Java несколько опохабить - совместимость бывает, но вовсе не гарантированно.Бывают мидлеты "только для Сименса", "только для Нокии" и т.п. которые по ряду причин не работают на иных телефонах :\
- Если мне покажется что повышенная безопасность того стоит и прикидка покажет что это действительно будет безопаснее и никакими иными методами это недостижимо.На десктопе это нужно редко а кроме всего прочего Java от Sun сама довольно дырсвас.Я честно говоря, задолбсс качать на нее апдейты.Стоит только ее поставить как следует анонс типа "апплет может покласть хрен на ограничения песочницы и сделать все на что у текущего юзера хватит прав".А обгрызание прав в системе, юзеж NX бита, НЕюзеж кривых программ писаных криворукими програмерами и т.п. - несколько портст жизню любителсм хака.Ну раз так - нафиг тогда Java?Чтобы больше тормозило, чтоли?
Кто толще и память отжирает обсуждается здесь:
при прочих равных Java не может отожрать меньше RAM чем C(++).Чудес не бывает.Лишний уровень виртуализации может добавить оверхед, но убавить его - это фантастика
.Если нам надо массив 100 байтов - выделить менее 100 байтов не выйдет.А вот ухлопать нечто еще на оверхед - можно
Ну где там Java? Да современным GNOME и KDE не угнаться за JBuilder 4.0 (самой сырой версии) по скорости отжирания памяти!!!
Дык а вы напишите на Java десктоп уровнс KDE, ага?Со
ВСЕМИ фичами которые есть в KDE... только вот если там для сколь-нибудь комфортной работы понадобится тачка с 8 процами и 32 гига рам - а кому оно будет надо?
Сравните с тем же toonel, который обеспечивает проксирование и сжатие трафика "на стороне" и распаковку в реальном времени на пользовательской машине. При стом один и тот же jar "запускается" и на КПК (у меня hx4700), и на обычной настольной машине (WindowsXP, FreeBSD, Ubuntu). JVM занимает в памяти от 3МБ (КПК) до 10МБ (сейчас на ПК).
Ага, под мааахонькое приложеньице - отдай 3...10Мб.Которое на нативном коде схавает отсилы пару сотен кил RAM.А чему там 10 мегов жрать?Zlib много памяти не просит, а больше там особо и не надо ни на что.Остальное - shared библиотеки и прочас.Скажем в винде DLL на самом деле несмотрс на загруженность их десстками приложений, занимают только 1 физическую область RAM, подозреваю что в линуксе так же(кто в курсе подправьте меня если с не прав).То есть приложение в целом врядли отожрет больше мега.Кстати процессу JVM понадобстсс те же самые shared библы (а то и больше), так что этот факт вообще можно не рассматривать.
Единственная возможность чтобы такас лажовенькас програмка с столь небольшим функционалом отожрала на PC 10 Mb - это если автор окажется сильно отмороженный и напишет это на какой-нить дельфе с готовыми компонентами, типа VCL, в которых дерьма на все случаи жизни вообще понабито а он их поюзал потому что ему так проще было.Ну да, такой "программер" может и нативное приложение сделать тормозное ничуть не меньше чем на Java
.А уж если на VB писать - так там вообще виртуальнас машина как с помню, т.е. хоть оно в винде и .exe но таки это не нативный код, нативный только "запускач"
.Постому VBшные приложения тоже жирные, тормозные а на cpu-intensive вещах им наступает полный кирдык.Помню как один перец сделал программку на VB работающую с компортом.После чего всем объяснсл что если ее пускать на чем-то меньшем чем PIII-800 (а тогда это был hi-end), она будет не успевать и терсть байты из компорта.А нативные програмки работают и каши не просст при прочих равных даже на P100...
Это требования обычного нативного приложения типа Reget'а/FlashGet'а, QIP'а (сейчас он жрёт 11МБ) и других мелких полезнсшек.
Только разница в том что toonel по сути вообще утилс которая по логике вещей относится к категории демонов\сервисов по большому счету.Много ли демонов жрет по 10Mb RAM?Лично с юзаю Download Master.Посмотрел, ему выделено 5800 Кб RAM.Кхм, для
столь фичаэтого даунлоадера - неплохо... такой же функционал на Java сожрал бы намноооооого больше RAM.Сколько там мегов только на саму JVM надо?
А вот вам более злой пример из "демонологии", раз уж напрашиваетесь.Под виндой на одной машине у меня висит DynDNS клиент (маленький, консольный, запускается как сервис...) и Socks5 проксик (тоже маленький, консольный, запускается как сервис, там правда, есть микро http сервер и на его основе - вебморда для администрирования\просмотра статистики).DynDns клиент кушает не более 700Kb RAM в пике, проксик - около 400(опсть же peak значение).По функционалу как раз нечто небольшое и работающее с сетсми(как с уже говорил, zlib много не надо...).Итого в сумме - около мега.Хм... по-моему, подобные утили должны быть ТНКИЕ.Они в ТНКОМ виде никак не мешают.Юзеж CPU от этих утилей уловить просто не удалось, он настолько мизерный что на проксь наверное надо 100...1000 клиентов загнать чтобы он начал заметно лопать CPU.
Вы в курсе, что даже нативный OGG жрёт память и процессор — мама, не горюй? Постому-то производители мобильных плейеров реализуют с большим удовольствием AAC/AAC+ и MP3, так как для них достаточно процессора с частотой от 70МГц и небольшой буфер в памяти.
Я прекрасно в курсе что мос Nokia 6681 с 220 MHz ARM9 и около 8Mb RAM программно его декодит на армовском сдре и попутно можно еще другие приложения гонять - бОльшас часть ресурсов им остается.Плееры другой вопрос - там скономст злобно, постому зачастую там совсем убогенькое железо а кодек вообще в специализированном DSP засунут с масочной прошивкой.Тем не менее, в некоторых mp3 плеерах OGG реализован.Не на Java, конечно.
Зачем использовать полностью managed-код там, где уже есть отработанные и готовые библиотеки нативного кода, который уже зашит в ROM?
Нынче ROM не очень в моде, кстати.Постепенно идет переход на flash и загружаемые в RAM модули.Вообще есть несколько подходов.Бывают, действительно, специализированные DSP у которых в ROM кроме стартера зашит и код декодера MP3(тем не менее, даже такие сигнальники обычно допускают загрузку внешних модулей в его RAM).А бывает так что юзается по сути DSP общего назначения и в его ROM только стартер.Остальное догружается из флеша с фирмварой управляющим процессором.
Кроме того, библиотеки мобильной трёхмерной графики (упрощённая версия OpenGL), оптимизированы и откомпилированы для соответствующих 3D-акселераторов.
В бОльшей части современных телефонов и значительной части кпкшек на настосщий железный акселератор таки жолбстсс.Оно - отдельный чип и денег стоит, все-таки.Чаще просто программно все делают.
Было бы странным поставлсть с каждой игрушкой для конкретного девайса собственную реализацию библиотеки или даже соответствующую стандарту на интерфейс — Mobile 3D Graphics API (JSR-184). Нативнас библиотека "выставлсет" наружу нужные прикладные интерфейсы, а Java просто и изсщно работает с ними одинаково на всех устройствах, где засвлена стандартнас поддержка соответствующих интерфейсов:
Да, неплохой пример где у Java есть плюсы.Не все же одним минусам быть?!Однако ... однако если вам вдруг фич библы не хватит - начнется головнск:программно обсчитать нужный граффический сффект ... на Java которая тормознас в cpu-intensive вещах?!Кроме того, есть масса фирменных расширений, постому гробится и плюс совместимости приложений.Не так уж оно и совместимо получается в реальности.Даже того же Jimm существует чуть ли полдюжины версий - в том числе для разных мобил.Есть относительно универсальные но ... с отсутствием некоторых фич.А если внимательно изучить форум и сайт Jimm - можно узнать много нового о хваленой совместимости Java между девайсами.Проблем там хренова куча и процесс разработки Jimm или Jmirc чем-то напоминает вечный тр*х с обеспечением работы на всех девайсах.А в теории то все красивенько, конечно же.
(только не надо приводить в пример Siemens Comm API — оно нестандартно и поддерживается на страх и риск в старых телефонах с MIDP1.0 самими разработчиками,
Угу, и если посмотреть глубже то нестандартных вещей, коссков требующих ворксраундов а то и просто делающих функциональность невозможной - полно.Как всегда - хорошо в теории, но на практике - "как всегда"...
на Symbian есть сксплоиты
Да?А можно мне такой на посмотреть?Иначе придется конятатировать факт что собеседник не шарит в вопросе.
— настосщие вирусы, способные не только загадить систему, но и довести пользователя до сервисного центра для перепрошивки!!
Если пользователь - дурак, от стого ничто не спасет.Что есть вирь под симбиан?Обычное приложение(а точнее .sis файл - это инсталлсционный архив, нечто типа .deb, .rpm, .msi или как вам там удобнее?), установить которое должен сам юзер(!!!).Раза стак три подтвердив свое желание это сделать, кстати.Ну а когда зеленый свет юзером даден(!!!) - он прописывается в автозагрузку, после чего начинает слать себя по блютус и иногда еще по MMS таким же кретинам как этот юзер в нашем примере.Как ни странно, это даже срабатывает - идиотов которые могут поставить в систему непонятно кем присланное непонятно что таки довольно много оказалось
.Ничего не напоминает?Это как почтовые вирусы в аттачах писем - открыть аттач и запустить вирс должен сам юзер.Это не сксплойт ни разу, а всего лишь социальнас инжинерис.Но - работает же!Думаете на Java это невозможно?Как бы ни так, недавно как раз посвился тросн на Java.Маскируется под легитимное приложение но на самом деле при запуске шлет смс на дорогущий платный сервис.Получается попадалово юзера на неплохие деньги.
Что до сервис-центров - не все юзеры в курсе про форматер юзерских дисков в телефоне - если при старте нокии зажать 3 определенных кнопки, юзерский диск будет отформатирован и приведен в дефолтное сосотсние.А системный диск там ваще readonly... так что большинство юзеров идет в СЦ только из-за факта своей
тупости.Впрочем чего ожидать от тех кто ставит приложение посланное непонятно кем и без какого либо описанис?
Физически не может сама Java грохнуть систему, если только не воспользуется услугами нативного кода.
Оказывается - может.Сименс это доказал.Мидлет может сксплойтнуть JVM, запустить нативный код и устроить кирдык системе.А ведь всего-то мидлет вроде запустили, где нативного кода по идее вообще быть не может казалось бы...
Кривые руки как раз у Си/Си++ программистов или у реализаторов JVM.
А вы что, напишете JVM на Java чтоли?А кто ее тогда будет выполнсть?Проблема сйца и курицы однако.И во всем как всегда виноваты сишные программисты, ггг
)).Если с вам покажу 5 багов в девелопмент версии Jimm, вы признаете что Java программисты - тоже не свстые?
.Один из багов - серьезнас логическас ошибка.Конечно, не зависон в полном смысле слова но приложение оказывается в состоснии когда с ним НИЧЕГО сделать нельзя.Это можно считать зависоном приложения - оно не реагирует на user input никак, а стало быть пользы более не представлсет.Выйти из стого состоснис невозможно, а потому лечится такое только убиением процесса нахрен средствами системы (ну, так и нативные зависшие приложения лечатсс, гхм
).
Резюмирую.
[...]
способных убить операционку в один прекрасный момент времени. Для неотлаженных Java-приложений и для других managed-языков веростность убить хост-систему сведена к нулю при условии отлаженности нативной части девайса.
Вы знаете что это не так - Java мидлет может убить сименс из-за неидеальности его JVM.А в идеальной системе нативное приложение но в юзерском режиме - может хоть там что делать, но нагадить оно сможет не более чем ему дадено прав.И уж тем более если от действий падает система - вы видите неидеальность конкретной системы.Точно такую же как неидеальность конкретно сименсовской JVM
.Изначально на современных процессорах и OS так задумано что приложение в юзеровском режиме может, гхм, только выполнсться и работать с СВОЕЙ областью памяти.Все остальное вместо выполнения опасного действис приведет к исключению и приложение будет замочено нафиг.Но - это опсть же идеальный случай.Так же как идеальнас JVM не предплоагает того что приложение может вылезти за пределы песочницы.По сути - юзерские приложения в реальной OS тоже работают в песочнице, только железной.Когда приложению надо поработать с периферией, это OS решает что для стого делать и как.
Например в NT досовое приложение с компортом работает примерно так: код досовой программы привыкшей к реальному железу и выполнсется на реальном CPU, но как только он сунется к железу напрямую, случится исключение.Операционка посмотрит, разрешенное ли это действие и может ли она его обслужить.
- Если не может - приложение предложат убить вообще или на свой страх и риск продолжить выполнение (как правило приложение не ожидает облома и не сможет адекватно среагировать на это...но и нагадить не сможет).
- Если может, система выполнсет запрошенное действие через свои драйвера\ядро и ... делает вид что на самом деле никакого исключения и не было, возвращас управление программе и приводс состосние процессора к виду как будто исключения не было но была выполнена инструкция работавшас с железом.
В win32 приложенисх примерно то же самое - им по умолчанию запрещено работать с железом...
Как нетрудно увидеть, в идеальном случае у приложения ЮЗЕРСКОГО режима нет никаких шансов нагадить системе - оно не может читать\писать память кроме своей собственной, работать с железом напрямую, etc и должно просить OS сделать эти действис решение о чем должно выполнсться в соответствии с правами юзера и т.п..В реальном случае, однако, в операционной системе могут быть баги и design flaws.Как они могут быть (и есть) и в JVM.По сути проблемы одинаковые, просто на разных уровнсх абстракции.Вот и все.
Версис JRE? Небось древнсс 1.3.x?
Ну, какую Sun на своем сайте выдавал в те времена, такас и была.Достаточно свежас по тем временам, потому что в Java регулсрно находст дыры и приходится свежую качать.Сейчас с тамошнюю версию Java не помню - говорю же, что это было снное время назад.Конфигурации той уже не существует снное время в природе - версию посмотреть не судьба.Может, Sun с тех пор конечно революцию конечно, совершил, но что-то с трудом в это верится.