Почему люди до сих пор говорят, что Java работает медленно? [закрыто]


61

Долгое время в SO и в других местах Java имеет репутацию медленной. От шуток до множества комментариев в вопросах и ответах люди по-прежнему считают, что Java работает медленно, основываясь исключительно на опыте работы с ней в 90-х годах.

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

Так почему же люди по-прежнему отказываются верить, что Java сейчас работает быстро? Является ли это частью их мышления, что все, что не является C / C ++, является медленным? Это потому, что люди не проверяют со временем? Это потому, что люди просто предвзяты?


10
Хм, C # тоже быстр;)
Эван Плейс

12
хм, эта ссылка не опровергает медленность Java.

13
У меня такое ощущение, что Java скорее не отвечает, чем работает медленно.
zneak

23
Раздутый и ужасный UI библиотеки ..?
dmp

4
Потому что JVM не является частью ядра. О, возможно, некоторые ребята из Linux добавят его в будущем.
Xiè Jìléi

Ответы:


131

Это приложения. Как вы заметили, мы уже доказали, снова и снова, что в выдуманных сценариев Java код может соответствовать или даже бить производительность так называемых «производительным» языков , таких как C, C ++, Lisp, VB6 или JavaScript. И когда представляются такие доказательства, большинство здравомыслящих, непредубежденных противников будут стыдливо опускать головы и обещать никогда больше не распространять такую ​​клевету.

... но затем они запускают Eclipse, или NetBeans, или Guiffy, или включают поддержку Java в своем браузере, или пытаются запустить приложение на своем любимом телефоне. И они ждут, чтобы это стало отзывчивым ...

... и подожди ...

... и подожди ...



... и подожди ...







... и подожди ...











... и ...




... что я обещал больше никогда не делать ? Извините, должно быть, задремал ...


44
Даже самый простой графический интерфейс Java запускается не менее 1,5 секунд. Это не чуть-чуть.
Питер Боутон

32
Я никогда не думал, что Javascript считается "перформативным" языком.
zneak

11
+1 за упоминание IDE. Существует огромная разница между отзывчивостью Eclipse и IDE, такой как Visual Studio.
mellowsoon

56
У меня есть проблемы с этим. Firefox написан в основном на C ++ и работает медленно. Означает ли это, что C ++ работает медленно? Нет, это означает, что Firefox работает медленно. Говорить, что язык медленный, потому что самая большая программа, написанная на нем, медленная, глупо.
TheLQ 23.10.10

13
Джонас, использование простейшего примера, который я могу найти, не делает меня плохим программистом. Если у вас есть волшебный метод, который запускает графический интерфейс Java менее чем за мгновение, продолжайте и продемонстрируйте его .
Питер Боутон

48

Этот вопрос работает в ложных посылках: где это имеет значение, Java все еще медленный. Здесь важны алгоритмы, требующие большого объема вычислений для больших наборов данных. Разумеется, их можно оптимизировать, иногда для соответствия коду C / C ++, но только за счет модульности и универсальности. Эффективный код C ++ может быть сконструирован так, чтобы быть универсальным и использоваться в качестве библиотеки общего назначения. Java-код не может. Достаточно взглянуть на сильно оптимизированный Array.sortметод, который использует разные реализации для всех основных типов и чей вариант объекта все еще намного медленнее, чем универсальный C ++, sortпотому что эти объекты должны динамически отправлять сравнения на равенство.

Конечно, как раз во время оптимизаций, выполняемых механизмом HotSpot, можно на самом деле предсказать цель этих виртуальных вызовов и попытаться встроить их. Но это все еще медленнее, чем прямой встроенный вызов, отправляемый внутри sortметода C ++ .

Мой бывший коллега выполнил сравнительные тесты для задачи по огромным наборам данных ( подсчет q- грамм с использованием динамических фигур) с помощью шаблонной реализации C ++ и объектно-ориентированной реализации Java. Код Java был на несколько порядков медленнее, чем код C ++.

Конечно, это сравнение яблок с апельсинами. Но дело в том, что реализация Java была наилучшей возможной реализацией (с точки зрения производительности, учитывая степень модульности, требуемой для библиотеки), как и реализация C ++.

К сожалению, данные бенчмарка не доступны в свободном доступе, но другие нашли похожие цифры при сравнении издержек абстракции во время выполнения. Например, Скотт Мейерс пишет в Effective STL об издержках обобщенной qsortфункции C :

Сортировка C ++ практически всегда смущает qsort C, когда дело касается скорости. […] Во время выполнения sort выполняет встроенные вызовы своей функции сравнения… тогда как qsort вызывает свою функцию сравнения через указатель. […] В моих тестах с вектором из миллиона двойников [сортировка] работала на 670% быстрее…


6
Чтобы быть справедливым, std::sortэто один из случаев, когда трудно сделать что-либо подобное на других языках. Но подавляющее большинство проектов, которые я видел, не пишут std::sortподобный код. Они пишут (плохой) код Java на C ++ и жалуются, что у них есть проблемы.
Билли ОНил

2
Есть ли у вас отчеты, подтверждающие вашу историю о том, что огромные наборы данных работают медленно? Я слышал, как люди говорили об операциях с 1-2 миллионами входных списков, и это все еще быстро. И разве не возиться с массивными наборами данных в памяти (обычно такими вещами, как в БД) является чем-то вроде нишевого поля?
TheLQ 23.10.10

8
@TheLQ: источником является книга SeqAn от Gogol-Döring & Reinert. А по поводу вашего контр-примера: какие операции? И что они считают «быстрым»? Кроме того, записи 1E6 не так уж велики. ;-) А относительно того, является ли это нишевым полем - конечно. Но здесь вам нужны быстрые вычисления. Вопрос в том, является ли Java быстрой , а не «достаточно ли быстрой» для недорогих операций. На достаточно маленьком наборе данных все достаточно быстро.
Конрад Рудольф

2
нет такой вещи, как наилучшая возможная реализация
Джереми-Джордж

3
@fonzo Могут быть разумные приближения. Поцарапайте, что для достаточно простого алгоритма и четко определенной метрики может быть наилучшая возможная реализация. Это тот случай, здесь. Алгоритм прост, и есть четко определенный случай, для которого был оптимизирован: время выполнения на заданном входе.
Конрад Рудольф

28

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

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


Затраты на запуск являются проблемой, но вы можете настроить их с помощью некоторых параметров командной строки
TheLQ

22
Сколько пользователей на самом деле знают о параметрах командной строки?
Уолтер

17
TheLQ, если вы можете предоставить переключатель командной строки для удаления задержки запуска 1.5s для Swing / AWT, пожалуйста, продолжайте и ответьте на это: stackoverflow.com/questions/508723/…
Peter Boughton

6
И как мне настроить эти параметры командной строки, чтобы избежать блокировки всего браузера в течение 5 секунд, если я нажму на ссылку, которая содержит Java? Это та вещь, которая заставляет людей называть Java медленной, и не имеет значения, что после загрузки она работает довольно быстро.
Роман Старков

21

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

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


3
+1 - полностью согласен Я ненавидел Java в первые дни. Платформа .NET Framework действительно помогла в создании управляемого кода: мне понравился C #, и в конце концов я также оценил Java.
Wizard79

7
Все еще требуется более секунды, чтобы запустить привет мир. Это медленно с точки зрения времени запуска.
интуитивно

@intuited Попробуйте создать сервер на C ++ / C # или на любом другом языке, который вы можете найти. HECK, попытайтесь создать его на C и затем сравнить с JAVA. С C в том, что это быстро, если вы «Ма, я написал 10-строчный код на C, который быстрее, чем Java, но вы не можете его прочитать». В тот момент, когда ваш код на C растет, ваша скорость замедляется;)
AceofSpades

16

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

Это не имеет никакого отношения к тому, как быстро становится Java. В сознании людей Java является константным идентификатором, связанным со словом «медленный». С этим ничего не поделаешь ни ты, ни Оракул.

Просто будьте счастливы, что Oracle не разрушил культуру программирования Java (пока), делая глупые или глупые поступки . Как взимать чрезмерную стоимость лицензирования, чтобы использовать его. Или подать в суд на людей на основе патентов на программное обеспечение, ранее принадлежавших Sun. ::вздох::

Я не хочу быть скептиком здесь, но, если Oracle и Google не решат борьбу с Java на хороших условиях, или Google не будет вынужден покупать Java и сделает ее «правильной» платформой с открытым исходным кодом, Java вполне может стать ребенком детская площадка с вшами. То есть никто не захочет трогать его 20-футовым шестом.

Примечание: просто чтобы прояснить, когда я говорю «поколение», я говорю в терминах людей, а не в терминах компьютеров. То есть, пока люди, которые придерживаются этого восприятия, не умрут от старости или не будут заменены молодым поколением, восприятие останется верным. Думайте в терминах 5 десятилетий, а не 5 лет.


2
Я думаю, что Google использует так много Java, что его покупка - не совсем невыполнимая теория. Я, наверное, был бы счастлив с этим.
Барт ван Хейкелом

1
@donroby: А кого волнуют эти языки? Через два десятилетия Java станет нишевым языком.
Aasc 22.10.10

1
@aasc - Java может устареть через два десятилетия, но LISP не сейчас и не будет тогда.
Дон Роби,

2
@aasc "Языки программирования обычно живут не больше поколения" Добрый господин, 1 миллион разработчиков Delphi - это Паскаль, 5 миллионов разработчиков Visual Basic ошибаются ... не говоря уже о Perl, Lisp, Fortran, Cobol, C ++ у вас есть любое оправдание для этого комментария ???
Действительно,

2
@ Реально не в мейнстриме. Сколько бизнесов зависит от Lisp, Fortran, Cobol. С помощью lisp он в основном попал в академические круги и используется в качестве модели для функций других языков, лишь немногие используют его для реальных производственных проектов. Fortran стал нишевым языком для высокопроизводительного математического моделирования, и Cobol остается только потому, что банковская индустрия чертовски боится изменить свой старый / надежный код на новую платформу. C ++ - явное исключение, потому что он все еще очень широко используется и принят сегодня.
Эван Плейс

11

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

Согласно тому, что мне сказали, когда я впервые начал программировать, Java «медленнее», чем C ++, и причина, по которой Java можно использовать, заключается в том, что он «удобен и проще». Считается, что Java приносит безопасность и удобство за счет производительности. Даже когда позже изобрели C #, люди считают, что он быстрее, чем Java, потому что он «родной».

Но истина, которую люди видят, не ощущая этого, заключается в том, что Eclipse, IDE, построенная на Java, является абсолютно БЫСТРОЙ IDE в классе. Я использовал почти все основные потоки IDE, от MS и GNU, Borland ... eclipse - абсолютный король IDE, во многом благодаря его быстроте.

Другая причина - это длительное время запуска .

Java не подходит для разработки крошечного приложения, которое остается в системном трее, потребляет немного памяти, всплывает диалоговое окно, напоминающее вам сделать перерыв; или блокнот, который вы используете, чтобы открыть текстовый файл, прочитать его и закрыть его. Он должен использоваться на чем-то БОЛЬШОМ, например на веб-сервере, который всегда есть, оптимизировать использование вашего вычислительного ресурса, отвечать на миллионы запросов каждый час. Или IDE, как Eclipse, который управляет тысячами файлов рабочей области. Я полагаю, вы не знаете, что ваше Java-приложение работает быстро, пока оно не запустится хотя бы на несколько часов.


1
Я вижу медлительность все время.
2010 г.

28
Затмение быстро? LMAO
finnw

2
@finnw - это если ты его настроишь. Из коробки и со всеми плагинами, очевидно, это не будет быстрым. Очевидно, что его никогда нельзя сравнить с vim, jedit или Notepad ++, но эти «быстрые» или «медленные» аргументы и утверждения не имеют смысла без контекста.
luis.espinal

2
@luis, однако, вы можете сравнить его с Delphi 7, который, я не думаю, намного проще, чем Eclipse. И Delphi 7 почти так же быстр, как блокнот. Это безумие.
Роман Старков

4
@finnw, для IDE с миллионами плагинов это довольно быстро :)

8

@bigown "Почему люди все еще говорят, что Java работает медленно?"

Потому что они тупые. Потому что у них нет опыта работы, но они считают себя живым воплощением Дикжстры или вторым пришествием Линуса Торвальда, о, я не знаю. Причин для того, чтобы говорить такие отсталые вещи, так много, но обычно за ними, похоже, стоят глупость, бессмысленный субъективный фанатизм и эмоциональное влечение к себе.

Давайте рассмотрим это так, чтобы вы могли видеть правду из того, что я только что сказал выше:

Во-первых, что медленно, в каком контексте, для чего, при каких условиях, с какой инженерной / научной / коммерческой целью (для того, чтобы сказать, что это отстой, это не одно из них). Любой человек, который говорит «Х медленно» для любой технологии X, или просто «X - это Y», где Y - это какое-то отрицательное утверждение, без ответа на любой из вышеперечисленных вопросов следует отвергнуть как дурака. Подобным утверждениям не место в технике. В политике и юношеских чатах может быть, но не в инженерном деле.

Во-вторых, большинство этих заблудших дураков кричат ​​о том, что Java медленная, потому что ZOMG, их затмение затягивается вечно (ну и дела, загрузите штуку со всеми плагинами и угадайте, что произойдет.) Большинство этих дураков даже не знают, как настроить JVM для быстрого затмения (или для любого Java-приложения в этом отношении). То есть они не имеют ни малейшего представления о настройке производительности, которая является реальностью не только для Java, но и для любой нетривиальной системы, будь то аппаратное или программное обеспечение. Так что прямо здесь они обезоруживают себя за любую техническую обоснованность, делая такие бессмысленные заявления.

В-третьих, давайте рассмотрим, для чего нужна основная часть разработки Java: в первую очередь бэкэнд OLTP; Системы мониторинга на втором месте. Любой тип системы предназначен для работы в кластерах и бесперебойной работы в течение нескольких недель, если не месяцев. Значит ли это действительно так, что вашему маленькому приложению-затмению или игрушечному приложению требуется минута-две для загрузки, когда целью РЕАЛЬНЫХ Java-приложений является работа в течение продолжительных периодов времени? Контекст, люди, контекст.

Наконец, основа OLTP в Google и Ebay работает на Java. Я бы воспринял это как доказательство от противного, что Java не медленная (по крайней мере, для условий, которые имеют значение, а не для небольших игрушечных экспериментов, тестов и непроверенных анекдотических доказательств, сделанных специально для того, чтобы сказать: «Х медленный, это отстой».

Есть инженерия, и есть фанатизм. Угадайте, к какой категории относятся подобные заявления?


19
Если мне нужно настроить мою JVM, чтобы заставить Java работать достаточно быстро, в то время как мне не нужно ничего настраивать (кроме -O2), чтобы заставить C ++ работать достаточно быстро, тогда Java работает медленно.
Дэвид Торнли

@ Дэвид - Очевидное утверждение. Кто-нибудь знает, что Java медленнее, чем C ++. Однако из этого не следует, что это медленно. Ни одно из упоминаний флагов gcc не дает действительности комментарий. В нем только говорится, что it is slower than something else.ягуар медленнее гепарда. Это делает первое slow? Попробуйте некоторую инженерную объективность и спросите себя: можно ли логически заявить, arbitrarilyчто что-то slowпросто потому, что it is slowerчем-то еще, without mentioning a context of operationsчто определяет, что есть fast enoughи для чего? Вы можете, по логике?
luis.espinal

5
@ luis.espinal: Я отвечал на вашу причину # 2: люди говорят, что Java работает медленно, потому что, по вашему мнению, они не смогли настроить Java. Пожалуйста, обратите внимание, что я использую «приемлемо быстро». Мне кажется, что что-то, что не является «приемлемо быстрым», является медленным, и мне кажется, что то, что люди обычно утверждают, является медленным, вероятно, не приемлемо быстро.
Дэвид Торнли

4
@luis espinal Вы говорите как Кант :) Люди здесь неявно предполагали, что «медленный» означает «более медленный» по сравнению с другими практичными, готовыми к использованию языками, такими как C ++. (Помните физику?), Когда вы измеряете потенциальную энергию, вы всегда измеряете ее относительно некоторой земли. Теперь, следуя вашей грамматике, «Х глуп» - безосновательно. и «X глупее, чем Кнут», не делает X абсолютно тупым, так как почти каждый может быть X здесь. Я согласен, что называть медленным лангом - это не элита, а люди, которые говорят, что это не «глупость», а просто случайное предположение.
Яти Сагаде

1
@luis hahaa .. хорошее наблюдение. (Мое убеждение, что вы реинкарнация Канта, стало еще более твердым;)) И такие дискуссии заканчиваются пламенными войнами и непродуктивными нажатиями клавиш ... По моему мнению, всегда следует придерживаться того, что кажется лучшим инструментом для решения работа под рукой. Согласитесь, Кант2? : P
Yati Sagade

8

Потому что, можем ли мы закрыть эту тему раз и навсегда?

https://days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdf [прокрутка вниз до таблиц, Java в 3,7-12,6 раза медленнее, чем C ++, исследование сотрудников Google]

PS: Если это не так, назовите мне хотя бы одно быстрое Java-приложение для начала, которое я раньше не видел.


6
Пожалуйста, кратко изложите содержание PDF в вашем ответе.
Адам Лир

1
Эта статья очень далека от стандартов научных исследований. Он даже не сравнивает абсолютно одинаковые алгоритмы и оптимизации на всех языках. «Настройки Java. Джереми Мэнсон привел производительность Java вровень с исходной версией C ++. Эта версия хранится в каталоге java_pro. Обратите внимание, что Джереми сознательно отказался от дальнейшей оптимизации кода, многие из оптимизаций C ++ применимы к Java версия также. " jeremymanson.blogspot.com/2011/06/scala-java-shootout.html
Петр Колачковский,

6

TMHO, это из-за времени, необходимого для запуска виртуальной машины в браузере. Если приложение запускается медленно, люди будут помнить только это. Потому что долгое время запуска действительно раздражает. В самом деле. Один из моих коллег сказал мне, что он не использует Firefox, потому что он работает слишком медленно. (?!?). Но, да, хорошо, в Windows Firefox требуется огромное количество времени, чтобы появиться. По его словам, это приложение медленное, он подумал об общей скорости его работы.


Вот почему Mozilla потратила очень много усилий, чтобы Firefox начал быстро ...
Spudd86

2
Может получиться как Windows. Да, после входа в систему вы видите рабочий стол очень быстро, но затем вам все равно придется подождать, пока он не станет отзывчивым.
Барт ван Хейкелом

6

Медленный по сравнению с чем? Я думаю о переходе с обычного Ruby на JRuby (Ruby на основе Java), потому что я слышал, что это быстрее.


1
JRuby это быстрее , чем Ruby, даже в версии 1.9. Тем не менее, разрыв сокращается.
Дэн Розенстарк

2
+1 за указание на большую проблему. Хотя я бы сказал, что OP, вероятно, сравнивает с C # или C ++.
Билли ONEAL

@ Яр, вы указываете, что CRuby догоняет JRUby?

6

Мнения - это мнения, а факты - это факты.

Вот факт из Google Code Jam, который, возможно, бросает вызов программистам для решения сложных вычислительных задач за короткий промежуток времени, а это означает, что производительность языка, который они используют, играет важную роль:

В прошлых выпусках (2009, 2010, 2011) около 75% программистов, пришедших на финальные раунды, использовали C ++, а не около 15% - Java.

Источник -> http://www.go-hero.net/jam/


3
Это только на самом деле доказывает, что Java может выйти на вершину соревнования, ориентированного на скорость, но большинство людей выбирают C ++.
Адам Лир

3
«решать сложные вычислительные задачи за короткий промежуток времени» - что, время, необходимое для написания кода, или время, необходимое для запуска кода? Несмотря на это, ваш факт - это факт, какое это имеет отношение к вопросу? Вы делаете вывод из своего факта?
Occulus

это может быть просто потому, что 75% людей, пишущих программы, которые делают последние раунды, думают, что Java работает медленно, даже не тестируя ее, и поэтому вместо этого используют C ++, потому что считают, что это быстро, даже не тестируя ее.
13:00

4

Приблизительно в 1997 году я использовал HP Vectra VE (200 МГц) и Windows 95. Большинство приложений работали на этом очень быстро, но затем я попробовал несколько приложений, написанных на Java (IDE, если я правильно помню). Они были очень медленными, по крайней мере, их части с графическим интерфейсом. На их запуск ушло много времени, а элементы графического интерфейса (например, меню) были не очень отзывчивы - визуальные отзывы были задержаны. Кроме того, поскольку приложения Java с графическим интерфейсом имели (имеет) довольно отличительный вид, я научился ассоциировать этот вид (и Java) с низкой производительностью.


2
Я помню 1997 год! Великолепный год, хотя многие вина - и наблюдения - с 1997 года больше не годятся для использования.
Дэн Розенстарк

1
Я тоже хорошо помню 1997 год. Windows все время зависала и требовала перезагрузки при установке драйвера. Кусок хлама.

И вы не изменили свое мнение о 1997 году? Вы заметили, что 2011 год полностью отличается от 1997 года?
Джеспер

5
Мой анализ на основе этих данных был бы отстойным.
JasonTrue

4

Это зависит от того, что вы подразумеваете под медлительностью.

Прежде всего, java as добился большого прогресса в последнее время и в большинстве случаев очень быстр. Но :

  • Java запускается медленно, потому что вам нужно загрузить JVM, прежде чем что-либо делать.
  • Некоторые функции безопасности могут убить производительность в некоторых случаях. Связанная проверка с произвольным доступом является примером.
  • Сделать что-то действительно быстрое в java необходимо для работы с JVM (для примера используйте строку кэша).
  • Отсутствие метапрограммирования подразумевает пенильность во время выполнения каждой абстракции, поэтому производительность во многих случаях приводит к издержкам проектирования.
  • Ява вряд ли может обеспечить ограничение реального времени - по замыслу - и это может считаться «медленным» некоторыми людьми.

Кстати, java в некоторых случаях быстрее, чем vanilla C / C ++. Но эти языки дают вам инструменты для их настройки.

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

В целом, медлительность Java является чрезмерно аргументированным аргументом, поскольку в большинстве случаев она не имеет значения.


2

Простой канонический код Java, как правило, соответствует или быстрее, чем простой канонический код C / C ++ / D. Простой канонический код имеет тенденцию выполнять ненужное выделение большого количества памяти, не особенно настраиваться на какую-либо архитектуру ЦП, не иметь тонны низкоуровневых оптимизаций и т.д. быть лучше, чем то, что может сделать статический компилятор.

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


5
Можете ли вы получить эти комментарии? Т.е. где какие-либо тесты, показывающие канонический код на каждом языке, показывающий, что Java работает быстрее?
Билли ОНил

1

Еще одним моментом медлительности Java является 64-битное время выполнения.

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

ЗДЕСЬ есть объяснение, почему 64-битная ВМ запускается медленнее.

Например в Windows:

C:\> java -version  
java version "1.6.0_21"  
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)  
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b16, mixed mode)  

3
Сервер VM медленнее запуска , но это не изначально компилировать всю программу , прежде чем начать. Это невозможно, классы загружаются лениво и потенциально с помощью рефлексии, поэтому нет никакого способа заранее узнать, какой байт-код должен быть скомпилирован нативно.
Дэн Дайер

@ Дэн Дайер После некоторого исследования похоже, что я неправильно понял то, что я прочитал. Я имел в виду, что виртуальная машина сервера выполняет большую оптимизацию, а клиент оптимизирован для быстрого запуска и меньшего использования памяти.
AndrejaKo

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

0

Производительность Java очень субъективна, однако, понимание того, почему Java медленная, в значительной степени объясняется причинами, которые отмечают другие: большинство людей воспринимают что-то под влиянием своего более раннего опыта работы с ним, и Java не всегда был хорошо оптимизированным языком. капот. Точно так же vanilla Eclipse не совсем быстрая IDE для работы и меркнет с точки зрения отзывчивости по сравнению с IDE, такой как Visual Studio.

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

В области биоинформатики он используется довольно часто, потому что он хорошо поддерживается и уже существует база для установки, одним из преимуществ которого является то, что вы можете сделать довольно быструю разработку, которую вы не можете сделать с C Если вы посмотрите на языки, используемые для биоинформатики (я лично регулярно использую R, Python и Java), вы заметите, что ни один из них не является самым быстрым, и наборы данных в биоинформатике нередки для 100-х годов. гигабайт информации. В конце концов, человеческое время все еще более ценно, и хотя различия в скорости заметны, размер наборов данных, как правило, достаточно велик, чтобы они все равно работали в одночасье.

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


0

Чтобы бросить бесполезную монету, я обнаружил, что веб-приложения на Java обычно имеют долгое время запуска и время отклика, и мне кажется, что Python или Ruby работали бы лучше.

Я использую Eclipse для большей части моего программирования, и я должен сказать, что Java работает так же быстро, как и все остальное, если не быстрее, работает локально и «автономно».


1
В Интернете время запуска не так важно. Потребление ресурсов и масштабируемость имеют наибольшее значение.
Берин Лорич

-7

Я бы сказал, что Java бесконечно медленная, а не просто медлительная, потому что она не в состоянии решить простые проблемы, которые просты в реальных языках высокого уровня.

Позвольте мне привести простой пример. Существует простая оптимизация, которая применяется при двойном отображении списка, называемая вырубкой лесов: вот правило для него, написанное на моем языке Феликс:

reduce deforest[T,U,V] (f:T->U, g:U->V, x:list[T]): 
  map g (map f x) => map (compose(g,f)) x
;

которая гласит: вместо отображения списка x с помощью f, а затем отображения его снова с помощью g, требующего двух обходов списка и создания временного списка мусора, просто сопоставьте список с композицией функций.

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

Пожалуйста, покажите мне, как делать такие вещи в Java. Нет? Тогда Java работает медленно. Очень медленно. Хаскелл может сделать это автоматически, я верю.

И прежде чем вы скажете: «Но Java - это ОО-язык, этот вид оптимизации не применим»… ну, в этом-то и заключается моя точка зрения. Java отстой, и быть ОО является одной из главных причин.

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


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

7
-1 выкопать старый вопрос и избить язык с очень неубедительными аргументами. Скажите, хотите ли вы подробное описание того, что не так с вашими рассуждениями. Начнем с того, что указывать ОО в качестве основной причины, по которой он отстой, не очень объективно, а производительность JVM + JIT де-факто очень хорошая, даже если оптимизации не учитываются.

8
Haskell бесконечно медленнее, чем Java для нашей основной платформы, потому что он не перенесен на указанную платформу, поэтому Haskell отстой ...

1
@ Thorbjørn Ravn Andersen Мне бы очень хотелось дать вам +1 за это наблюдение.
Патрик Хьюз
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.