LINUX.ORG.RU

Доверьтесь виртуальной машине


0

0

Таков смысл одного из разделов интервью с популяризатором технологий Sun Брайаном Гетцом. В нем он поясняет этот тезис. "Разработчики очень любят оптимизировать код, и не зря. Это весело и увлекательно. Но гораздо важнее знать, когда стоит заниматься оптимизацией, а когда – нет. К сожалению, в основном разработчикам редко помогает интуиция в выборе участков приложения, требующих ускорения выполнения.

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

Поскольку программисты уже 45 лет занимаются созданием сборщиков мусора, сегодняшние сборщики мусора гораздо более изощренные, чем принято думать

...Если бы я мог послать волшебной палочкой сообщение всем разработчикам на Java, я бы сказал им: доверьтесь виртуальной машине. Она умнее, чем вы думаете. Перестаньте пытаться обставить и обогнать ее. Пишите в коде то, что вы хотите, чтобы она сделала и она сделает все возможное и даже чуть больше чтобы то, что вы задумали, выполнилось наиболее быстро."

>>> Подробности

anonymous

Проверено: Pi ()

Ответ на: комментарий от Bohtvaroh

>Может даже можете указать на собственный проект, как эталон небыдлокодерства? Интересно было бы посмотреть. ;-)

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

lexius ★★
()

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

jet_bird
()

Насмешил товарищ, сказавший, что Hibernate и JSF нужны только архитекторам. Смешно.
Язык - это не сферический язык в вакууме. Язык под задачу. Если с некоторым кругом задач Java справляется лучше других - ну и будут писать не ней, поскольку это ЭКОНОМИЧЕСКИ выгодно. У жабы, при ее любви к памяти, есть много преимуществ, главное из которых следующее: это язык для идиотов. Да, хороший программист - это клинический идиот. Он идиот, он переходит с C на C++, поскольку, видите ли, в его прикладной программе (про дрова, "вычислительные ядра" и т.д. не говорим) ему почему-то сложно запомнить, даже соблюдая соглашения по именованию, имена четырех сотен функций, параметры и так далее, он не хочет помнить, где он может обращаться к полям структур. Он хочет, чтобы он мог написать private и после этого компилятор бил его по руками, считая себя самым умным и не разрешая лезть в private методы и поля. Как человек с опытом работы на C, C++ и Java, могу сказать: Java предусматривать НЕДОСТИЖИМУЮ для C и С++ скорость разработки. А скорость работы - не смотрите на кривые поделки :) Кстати, есть одно интересное наблюдение: если программа плохо написана на Java, то она ест много памяти, если она плохо написана на C++, то она валится в Segfault. В чем проблема? Что происходит при выходе за границы массива в плюсах? А зачастую ничего, продолжение выполнения. В жабе - исключение. А теперь скажите мне, как быстро будет работать программа на плюсах, которая контролирует в процессе выполнения все выходы за границы массива?
Если нужен пример хорошей программы с качественным визуальным интерфейсом на жабе - посмотрите IntelliJ IDEA. Тем, у кого мало памяти - версии 5.0 или 4.5. Кстати, во многом, работая в ней, можно проследить идею "жаба - язык для идиотов". 90% ошибок в коде, которые запросто можно было бы пропустить в аналогичном коде на C++ (приведение к неправильному типу, например) запросто отыскиваются уже анализатором в составе IDE. В общем, язык для идиотов, которые не имеют достаточно мозга, чтобы их отыскивать сами? Или хотят больше времени тратить на задачи более высокого уровня?
Никто не думал над вопросом - почему сейчас очень редко используют goto? А почему только в очень специфических задачах используют ассемблер? А не по той ли же причине под оффтопиком шарп так вытесняет плюсы в десктопных приложениях?

anonymous
()

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

PS. Даже hello, world на jave выполняется примерно в 100 раз медленней чем на Си... Проверено.

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

> Ссылку на опровержение в студию ;-)

Ты спать ушел или как? :)

Микроядро L4. Ядра ОС: K42, SymbianOS. Подсистемы ядер ОС: IOKit в Mac OS X, файловые системы (IBM GFS, еще какие-то). До кучи - Си++ широко использовался в BeOS (правда, не уверен насчет ядра).

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

Hello world - не показатель. Существенная разница не из-за скорости работы, а из-за времени запуска.
При старте обычного бинаря время тратится только на загрузку библиотек и сборку всего этого безобразия воедино. При старте программы на жабе происходит компиляция байт-кода в нативный код, причем вся оптимизация происходит именно на этом этапе. Так что для чистоты эксперимента нужно запустить программу, которая печатает hello world 10000 раз и тогда сравнивать :))
Кстати, на самом деле время жабы пришло, но не на десктопе... Жаба достаточно прочно заняла свое место в серверных приложениях и там, где нужна жестокая переносимость (мобильные устройства и почти умершие апплеты). Десктоп - увы, никому в здравом уме не придет в голову с программой на 50к тащить машину на 5М. Если, как в случае шарпа, машина интегрирована в систему, причем компиляция происходит в процессе инсталляции софта (что решает проблему большого времени запуска) - почему нет? На самом деле, вот тут уже время разработки существенно. Если пользователь не видит разницы, то зачем платить больше?

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

> Может программерам стоит больше задумывать о том, как сделать программу максимально удобной в использовании (включая людей с ограниченными способностями), а не о том, как выиграть 10% времени выполнения оптимизирую поиск.

Программа удобна в использовании (в том числе для людей с ограниченными способностями) тогда, когда поиск работает быстро.

Dimentiy ★★
()

P.S. Всем любителям кросс-платформенных сепараторов - читать класс java.io.File, особенно внимательно - separator и separatorChar

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

>А теперь скажите мне, как быстро будет работать программа на плюсах, которая контролирует в процессе выполнения все выходы за границы массива?

Т.е. как сильно тормозят программы на C++ с STL - вы это имели в виду?

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

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

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

Говоря о проверках, я имел в виду запуск под debug в MS Visual studio 2003. Это один частный пример, и там, скорее всего, изнутри сделано не все самым лучшим образом, но я наблюдал, как там числодробилки работали в 6 раз медленнее, чем они же при запуске как Run. Я не знаю других примеров подобной функциональности (то есть запуска программы в режиме "валимся на любом чихе"), но думаю, что это сделать в C/C++ невероятно сложно и работать это будет ой как не быстро. Просто жаба, как я уже писал, рассчитана на идиотов, которым нужен несколько ограниченный набор функций. А с этим ограниченным набором работать гораздо проще среде выполнения, и она может достаточно эффективно контролировать подобные ситуации.
Да, жаба для дураков. Есть такая странная общая тенденция: человек, который добился мало чего, имеет высокое самомнение. Человек, который действительно знает много, наоборот, очень хорошо знает границы своих знаний, и понты не кидает :) Жаба тут хороша тем, что она, считая человека дураком, берет на себя часть его работы, и бьет его по рукам за глупые ошибки, позволяя ему думать не о мелочах реализации, а о собственно решаемой задаче. Это общая идея языка и платформы. Не зря ведь из языка убрали препроцессор, сделали контроль недостижимых операторов, checked exceptions, сборщик мусора, единый корень иерархии классов и тому подобные вещи? Да, с использованием препроцессора можно выписывать такие красивые вещи, да... Но это обычно сильно снижает читаемость кода, и уже через месяц человек будет смотреть на собственный код квадратными глазами и не понимать, что происходит. Жаба же считает его дураком, который в подобном коде точно не разберется, и просто препроцессора не содержит.

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

> checked exceptions

Вроде бы они официально признаны Плохой Идеей (tm) (r) ?

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

> Hello world - не показатель. Существенная разница не из-за скорости работы, а из-за времени запуска. [...] Так что для чистоты эксперимента нужно запустить программу, которая печатает hello world 10000 раз и тогда сравнивать :))

Смотрим результат для вывода "Hello, world!" 1000 раз на java
real 0m0.234s
user 0m0.100s
sys 0m0.024s

И на Си:
real 0m0.038s
user 0m0.000s
sys 0m0.000s

Теперь 10,000 раз на Джаве:
real 0m0.212s
user 0m0.108s
sys 0m0.020s

и соответственно на Си:
real 0m0.401s
user 0m0.008s
sys 0m0.032s


Взяты средние значения (несколько запусков). При первом запуске программы на java результат удручающий.

В целом, anonymous был прав.

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

> Смотрим результат для вывода "Hello, world!" 1000 раз на java
> .. И на С:

Пардон, конечно... но это ламерство. Тотальное.

Если ты не перенаправил вывод в /dev/null, то ты сравнил скорость отрисовки видео/x11/[freetype]/терминала (которая зависит от тысячи параметров).

Если ты перенаправил вывод, то ты сравнил размер дефолтных io буферов в libc и java'e, которые оказались разными.

Если размеры буферов одинаковы, а потоки перенаправлены.. Далее допустить, что библиотечные ф-ции puts/printf жабы и С оптимизированы до предела и работают одинакого быстро... А потом глянуть, что 10-ый, 100-ый, 1000-ый, 10000-ий, да хоть 10^x-ий цикл из одного puts/printf это всего то пара-тройка инструкций процессора, то сравнивать тут вообще нечего. Всё и так оптимизировано, по той причине, что по-другому этот код сделать нельзя.


Хотя, безусловно, твой тест доказывает превосходство Java-кода над С, в *реальном* enterprise "hello world"x10000 решении. ;-)

p.s. Если жаберы и дальше будут делать такие тесты, то их окончательно занесут в быдлокодеры. ;-) Или уже?

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

>>Проблема не в жабе, а в дровах на видюху.

>Я подозреваю что у жабокодеров существует специальный словарь отмазок, откуда они рандомно выбирают отмазку наиболее подходящую под цвет глаз оппонента :)
Как не странно, но на моей памяти было такое что firefox выдавал баги на экране компа при заходе на один из сайтов с java-аплетами, помогла только смена драйверов видеокарты(NNidia)

Atlant ★★★★★
()

В флеймообразующих темах, надо отключать анонимусов. Врага надо знать в лицо.

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

> Мне кажется тема правильная. Может программерам стоит больше задумывать о том, как сделать программу максимально удобной в использовании (включая людей с ограниченными способностями), а не о том, как выиграть 10% времени выполнения оптимизирую поиск.

Типа для лиц с лишними хромосомами?

> А то получается, что у меня проц занят на 10% стабильно, зато грёбанные интерфейсы часто просто клинять,

Косишь под них?

> а младшему брату надо довольно долго объяснять как пользоваться компом, хотя если бы программеры немного подумали над не техническими вещами, то я с радостью бы отдал 30% своего проца,

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

> если бы не мучался с постоянным обновлении программ из-за очередного buffer overflow (которых в java нет в принципе) или имел бы возможность и под Windows и под Linux пускать одно и те же программы (проблема редкого специального софта в Linux была бы решена).

Кривые руки - другим наука. А в гугле бан - всему кукан.

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

> Вообще, единственное, что на текущий момент я бы отнёс к преимуществам Java - то, что для неё проще писать IDE с рефакторингом. И то, это проблема конкретных IDE, а не языка. И уж точно не имеет никакого отношения к виртуальным машинам :)

Товарищ, скажу по секрету, что хороший код рефакторинга требовать не должен.

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

>Тем не менее так называемое "системное программирование" на плюсах и вовсе невозможно, не надо всё смешивать.

Какие такие "отличия" C++ от С мешают ему быть премененным в "системном программирование"??? По пунктам давай

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

>Товарищ, скажу по секрету, что хороший код рефакторинга требовать не должен.

да вы, батенька, наверное идеальный программист? ;)))

и работаете в командах исключительно с такими? где вы их столько находите? к примеру человек по 50 сразу? ;)))

AcidumIrae ★★★★★
()

Те кто жалуется на расход памяти - вы Java наверное только на картинках видели. Проводим простой эксперимент: смотри количество занятой памяти, 190 Mb. Запускаем SWING приложение. Смотрим опять, занято 206. Итого Java откушала 16 мегабайт. Что такое 16 мегабайт для современного компьютера? Ничего.

Открою секрет: на самом деле программа на Java требует еще меньше памяти. Все дело в минимальном размере кучи. Если его уменьшить, то и расход памяти для небольших приложений сократится.

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

> Он хочет, чтобы он мог написать private и после этого компилятор бил его по руками, считая себя самым умным и не разрешая лезть в private методы и поля. Как человек с опытом работы на C, C++ и Java, могу сказать: Java предусматривать НЕДОСТИЖИМУЮ для C и С++ скорость разработки

Просто откройте для себя языки алгольной группы. ADA форэкзампль, или накрайняк Modula.

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

Господа ,есть аксиома: юзеру не нравится когда программа тормозит. А джава в гуе тормозит.Выбор средств разработки -на совести кодера да, но пишет то он для юзеров которые ему за программу заплатят. Попробуйте кто-нить из джаверов на досуге сварганить shareware на джаве и попытайтесь продать - вы все поймете сразу.

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

> да вы, батенька, наверное идеальный программист? ;)))
> и работаете в командах исключительно с такими? где вы их столько находите? к примеру человек по 50 сразу? ;)))

Нужно стараться сделать работу как можно лучше, вплоть до идеала, тогда и мир станет лучше, а не срать на каждом углу в надежде на то, что проедет говноуборочная машина и всё подчистит.

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

Если плохую программу на С++ переписать на Java, то получим плохую программу на Java.
(с) Брюс Эккель

Мораль:
Java не способна заменить моск програмиста.

anonymous
()

То что нормальные люди при оптимизации используют профайлеры Sun ниасилили, похоже, раз не знают где надо оптимизировать, а где - нет.

Кстати, хорошая ссылка по теме из далекого 2004-го: http://coders.meta.net.nz/weblog/2004/09/29/but-jit-is-faster/

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

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

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

>Товарищ, скажу по секрету, что хороший код рефакторинга требовать не должен.

Да, не должен. Но никто не пишет хороший код, если это, конечно, не "Hello, World!".

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

>Просто откройте для себя языки алгольной группы. ADA форэкзампль, или накрайняк Modula.

Просто откройте для себя напитки алкогольной группы. Vodka форэкзампль, или накрайняк Pivo.

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

> Товарищ, скажу по секрету, что хороший код рефакторинга требовать не должен.

"Нет сынок. Это фантастика!". (С) Если в гипотетическом проекта не изменяются требования в ходе его выполнения, то это реально. Покажите мне такие проекты. Я хочу жить в этой стране :) Предусмотреть все возможные варианты расширения/изменения сразу? Покажите мне заказчика, который готов заплатить за это.

> Нужно стараться сделать работу как можно лучше, вплоть до идеала, тогда и мир станет лучше, > а не срать на каждом углу в надежде на то, что проедет говноуборочная машина и всё подчистит.

Эээ, батенька, да вы идеалист. С этим тяжело в нашем мире и в нашей профессии. Чуть больше цинизма. Стараться нужно... если заплатят :)

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

> А что, если вместо виртуальной машины написать ядро, которое бы исполняло байткод. Одной прослойки стало бы меньше. Интересно послушать, на сколько такое решение реально или лучше/хуже...

Дык давно уже все есть, и даже больше. Погугли на предмет ОС Inferno, почитай про Limbo и Dis. Однако ж почти не используется, ибо не Энтерпрайз, етить... :(

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

ТоварищЪ, ну очевидно же, что ты не программист-профессионал (в свете высказываний про рефакторинг)...

Так что не уподобляйся журналистам и ананимусам. Способность гнать чушь на произвольную тему как признак профессионализма исключительно их привилегия. Еще может политиков и блондинок.

Учись не быть блондинкой, или тебе нравится её быть ;)

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

> tailgunner, мы вроде на сайте linux.org.ru ;-)

А то. Так ты признаешь, что пригодность Си++ для системного программирования доказана практикой?

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

Зря вы так категорично... В конечном счете любое программирование только инструмент, с потощью которого решается какая-то задача. Я выбрал Яву как выбрал бы любой другой инструмент. Есть задачи, которые нужно реализовывать, но возможности достаточно ограничены. Теоретически, конечно, можно посадить тучу программистов и писать все с нуля, изобретая велосипед. А практически реально ли это, а? К тому же есть задачи, достаточно узкие, чтобы расчитывать на одобрение масс. И меня не сильно задевает, что мой продукт в конечном итоге потребует для работы пару гиг оперативки. Что до быстродействия, то это уже как писать. Можно состряпать такое, что на самой современной технике будет еле дышать. Есть очень много доступных качественных, хорошо управляемых библиотек и приложений-библиотек, написанных на Яве, которые можно использовать в больших проектах. Не нужно забывать про трудоемкость.

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

> Эээ, батенька, да вы идеалист. С этим тяжело в нашем мире и в нашей профессии. Чуть больше цинизма. Стараться нужно... если заплатят :)

Да знаю ;) Только вот в __вашей__ профессии, а нам, нефтяникам, как-то легче живётся, и "проявления идеализма" помогают много чего нехорошего предвидеть и некисло оплачиваются :)

Gharik
()

Если кому-то не нравится именно Java VM...
Если кто-то думает, что виртуальная машина -- это только способ обеспечения кросплатформенности...
Если кто-то просто хотел бы расширить свой кругозор...

Советую уделить несколько часов своего внимания открытому проекту LLVM (llvm.org). Уверен, это время не будет потрачено зря :)

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

> ТоварищЪ, ну очевидно же, что ты не программист-профессионал (в свете высказываний про рефакторинг)...

Нисколько, нафиг такое счастье, времена выпендрёжа прошли ещё с десятка полтора-два лет тому назад, вместе с ФИДО, вирусными эпидемиями и соревнованиями на тему "кто угробит больше машин меньшим количеством байтиков".

И вообще, современное программирование, ИМХО, по большей части превратилось в очковтирательство вперемешку с самоудовлетворением, в силу слабой привязки у миру реальному. Хитрожопые японцы, вон, смогли довести время от старта проекта до запуска в производство до пары недель для всяких сложных технических объектов - а тут сидят сотни и тысячи умников, не считая аутсорсеров, старчески пердят, ноют, жалуются на голодных детей и низкую зарплату, читают удафком и драный сериализатор-десериализатор умудряются писать вдесятером по тому же самому месяцу. И тем-более, что в силу непривязки к реальному миру, уж где-где, а прогерам сам Джа велит повторно использовать код и писать модульный софт на стандартных интерфейсах.

Короче, утомился я, нафиг всё, ИТ в нынешнем виде должно мученически умереть.

> Так что не уподобляйся журналистам и ананимусам. Способность гнать чушь на произвольную тему как признак профессионализма исключительно их привилегия. Еще может политиков и блондинок.

Поздравляю, Вы осознаёте в каком именно направлении стоит совершенствоваться, на блондинок нам не потянуть - остаётся одно =)

> Учись не быть блондинкой, или тебе нравится её быть ;)

Нравится, нравится. именно "её" =)

Gharik
()

Топик явно флеймовый. Хотя мысли в статье, IMHO, верные.

За себя скажу, что я пишу на Java, за это мне платят и платят хорошо. А споры типа "вот у меня на Celeron 400 Жаба тормозит, а ... - летает" - это троллинг в чистом виде. Слишком мало у меня времени, чтобы в подобных спорах участвовать. Мнения "кульхацкеров" (с) корпорациям глубоко по барабану.

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

> Мнения "кульхацкеров" (с) корпорациям глубоко по барабану.

Мнения "корпораций" (c) кульхацкерам глубоко по барабану :D

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

>Всем известно (от явакодеров) что java код может работать быстрее с/c++ кода, но никто в жизни не видел ни одного быстрого приложения на java. парадокс... :))

Парадокс в том что те, кто обычно так говорит, вообще не видели ни одного приложения на java.

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

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

Во. О чем я и говрю. Дотстоевского не читал, но...

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

>Попадает. Ещё как попадает. Процессор в несколько раз больше чем кторрент грузит. Оперативы жрёт 100мб.


QServerSocket: failed to bind or listen to the socket
ERROR: Communication problem with ktorrent, it probably crashed.
KCrash: Application 'ktorrent' crashing...


:))

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

>Так давайте уточним: 1) В жабе дятлы 2) В С - извращенцы

>А где программисты?

Какие программисты!? Чтоб в это говно добровольно сунуться, вместо нормального гуманитарного университета, надо быть либо дятлом либо извращенцем.

:)

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

>> А когда это векторы в STLе начали контролировать выход за границы массива?

>Всегда.

>T& vector<T>::at(int i);

И даже более того, можно использовать operator[], если контроль за границами не нужен.

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