Чому люди все ще кажуть, що Java повільна? [зачинено]


61

Тривалий час в SO та інших місцях Java має репутацію повільності. Від жартів до багатьох коментарів на запитання та відповіді, люди все ще вважають, що Java повільна, базуючись лише на досвіді роботи в 90-х.

Це моє питання: ми спростували (більшість) причин, через які люди вважають, що Java повільна. Поза дрібними речами, Java проходить досить швидко.

То чому люди досі відмовляються вірити, що Java зараз швидка? Чи є їх частиною розуму, що все, що не є C / C ++, повільно? Це тому, що люди не перевіряють час? Це тому, що люди просто упереджені?


10
Гм, і C # теж швидкий;)
Еван Плейс

12
Гмм, це посилання не спростовує повільність того, що ява повільний.

13
Моє відчуття, що Java відповідає не швидше, ніж повільно.
zneak

23
Роздуті та жахливі бібліотеки інтерфейсу ..?
dmp

4
Тому що JVM не є частиною ядра. О, можливо, деякі хлопці з Linux будуть додавати це в майбутньому.
Xiè Jìléi

Відповіді:


131

Це програми. Як ви помітили, ми вже довели, знову і знову, що в вигаданих сценаріїв Java код може відповідати або навіть бити продуктивність так званих «продуктивним» мов , таких як C, C ++, Lisp, VB6 або JavaScript. І коли вони будуть представлені з такими доказами, більш розумні, відкриті супротивники будуть соромити голову і обіцяють більше ніколи не поширювати подібні наклепи.

... але потім вони запускають Eclipse, NetBeans або Guiffy, або вмикають підтримку Java у своєму браузері, або намагаються запустити додаток на своєму улюбленому функціональному телефоні. І вони чекають, коли це стане чуйним ...

... і чекати ...

... і чекати ...



... і чекати ...







... і чекати ...











... і ...




... що я пообіцяв більше ніколи не робити ? Вибачте, мабуть, задрімали ...


44
Навіть найпростішому Java GUI потрібно щонайменше 1,5 секунди для запуску. Це не крихітний шматочок.
Пітер Бауфтон

32
Я ніколи не думав, що Javascript вважають мовою "виконавців".
zneak

11
+1 для згадування IDE. Існує величезна різниця між чуйністю Eclipse та IDE, як Visual Studio.
mellowsoon

56
У мене з цим проблеми. Firefox написаний в основному на C ++ і повільно. Це означає, що C ++ повільний? Ні, це означає, що Firefox повільний. Говорити, що мова повільна, тому що найбільша програма, написана на ній, повільна, є дурною.
TheLQ

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

48

Це питання діє в помилкових приміщеннях: де він рахується, Java все ще повільна. Там, де це рахується, є важкі алгоритми для обчислень на великих наборах даних. Зрозуміло, вони можуть бути оптимізовані, іноді нарівні з кодом C / C ++, але лише ціною модульності та універсальності. Ефективний код C ++ може бути розроблений таким, щоб він був загальним і використовувався як бібліотека загального призначення. Java-код не може. Подивіться на сильно оптимізований Array.sortметод, який використовує різні реалізації для всіх основних типів, і чий варіант об'єкта все ще набагато повільніше, ніж загальний C ++, sortтому що ці об'єкти повинні динамічно відправляти порівняння рівності.

Зрозуміло, саме в часі оптимізації, виконані механізмом HotSpot, можуть насправді спрогнозувати ціль цих віртуальних викликів та спроби вбудованих даних. Але це все- таки повільніше, ніж безпосередньо вбудований дзвінок, який відправляється всередині sortметоду C ++ ' .

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

Звичайно, це порівняння яблук з апельсинами. Але справа в тому, що реалізація Java була найкращою можливою реалізацією (з точки зору продуктивності, враховуючи ступінь модульності, необхідної для бібліотеки), і це було реалізацією C ++.

На жаль, дані базових показників не є у вільному доступі, але інші знайшли подібні цифри при порівнянні накладних витрат абстракції. Наприклад, Скотт Майєрс пише в Ефективній STL про накладні витрати на загальну qsortфункцію C :

Сорт C ++ практично завжди бентежить qsort C, коли мова йде про швидкість. […] Під час виконання сортування здійснює вбудовані виклики до своєї функції порівняння ... в той час як qsort викликає свою функцію порівняння через покажчик. […] У моїх тестах на вектор мільйона пар, [сорт] підбіг на 670% швидше ...


6
Якщо чесно, std::sortце один із випадків, коли важко зробити щось подібне на інших мовах. Але переважна більшість проектів, які я бачив, не пишуть std::sortподібний код. Вони пишуть (погано) код Java в C ++ і скаржаться, що у них є проблеми.
Біллі ONeal

2
Чи є у вас звіти про створення резервної копії вашої історії про те, що величезні набори даних повільні? Я чув, як люди розмовляють про те, щоб робити операції 1-2 мільйони списків вступу, і це все ще швидко. І чи не возитися з масивними наборами даних у пам’яті (зазвичай такі речі є в БД) трохи нішевого поля?
TheLQ

8
@TheLQ: джерелом є книга SeqAn Гоголя-Дерінга та Райнера. А щодо вашого зустрічного прикладу: які операції? А що вони вважають "швидкими"? Крім того, записи 1E6 не все такі великі. ;-) А щодо того, чи це поле ніші - безумовно. Але тут потрібні швидкі обчислення. Справа в тому, чи є Java швидкою , а не тим, чи достатньо швидкою вона для недорогих операцій. На досить малому наборі даних все досить швидко.
Конрад Рудольф

2
немає найкращого можливого втілення в життя
jeremy-george

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

28

Тому що це повільно ... в деяких додатках. Настільні програми повинні реагувати з самого початку, а накладні витрати вважаються повільними.

З іншого боку, якщо ви запускаєте сервер, це не має значення, чи є нагрівання (JIT-аналіз та компіляція) - ви робите це один раз у синій місяць, так що більшість часу це не можна вважати цілком повільним.


Витрати на запуск - це проблема, але ви можете змінити їх за допомогою перемикачів командного рядка
TheLQ,

22
Скільки користувачів насправді знають про перемикачі командного рядка?
Вальтер

17
TheLQ, якщо ви можете надати перемикач командного рядка, щоб зняти затримку запуску 1,5 секунди для Swing / AWT, будь ласка, продовжуйте та відповідь на це: stackoverflow.com/questions/508723/…
Пітер Бауфтон

6
І як я налаштувати ці перемикачі командного рядка, щоб уникнути блокування цілого браузера протягом 5 секунд, якщо натискаю на посилання, що містить річ Java? Це та річ, яка змушує людей називати Java повільною, і не має значення, що один раз завантажений її насправді працює досить швидко.
Роман Старков

21

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

Треба визнати, у мене склалося враження, що Java повільна, і так, це було з мого попереднього впливу на неї. Зараз я перейшов на різні мови і з того часу зазнав надзвичайно обмеженого впливу на Java. Отже, моя думка не сильно змінилася.


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

7
Це все ще займає більше секунди, щоб запустити привіт світ. Це повільно з точки зору часу запуску.
інтуїтивно

@intuited Спробуйте створити сервер на C ++ / C # або будь-якій мові, яку ви можете знайти HECK, спробуйте створити його за допомогою C і ТОТЕ порівняйте з JAVA. Справа в C полягає в тому, що це швидко, якщо ти "Ма, я написав код 10 рядків С, який швидше, ніж Java, але ти не можеш його прочитати". У момент, коли ваш код C зростає, ваша швидкість сповільнюється;)
AceofSpades

16

Тому що потрібно покоління, щоб змінити уявлення людей про продукт

Це не має нічого спільного з тим, як швидко стає Java. У свідомості людей Java - це ідентифікатор const, пов'язаний зі словом 'повільно'. Мало що, ви ні з цим, ні з Oracle не можете зробити.

Будьте щасливі, що Oracle ще не знищив культуру програмування Java, роблячи щось необдумане чи дурне . Як і стягнення надмірних витрат на ліцензування для його використання. Або позов на людей на основі патентів на програмне забезпечення, які раніше належали Sun. :: зітхання ::

Я ненавиджу бути найсайєром тут, але, якщо Oracle і Google не вирішать боротьбу з Java на добрих умовах, або Google змушений купувати Java і не робить її "належною" платформою з відкритим кодом, Java цілком може стати дитиною на майданчик, на якому є воші. IE, ніхто не захоче торкатися до нього 20-футовим стовпом.

Примітка. Просто для того, щоб бути зрозумілим, коли я кажу, що покоління, я говорю в людях, а не на комп'ютерних термінах. Тобто, поки люди, які володіють цим сприйняттям, не помруть від старості або заміняться молодим поколінням, сприйняття збережеться. Подумайте в термінах 5 десятиліть, а не 5 років.


2
Я думаю, що Google використовує стільки Java, що купувати їх - це не зовсім нездійсненна теорія. Я, мабуть, був би задоволений цим.
Барт ван Хекелом

1
@donroby: А хто переймається цими мовами? Через два десятиліття Java стане нішевою мовою.
aasc

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

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

2
@ Realallyeth Не в основному. Скільки підприємств залежить від Lisp, Fortran, Cobol. За допомогою Lisp він здебільшого захоплюється в академічних колах і використовується як модель для особливостей інших мов, мало хто використовує його для фактичних виробничих проектів. Фортран став нішевою мовою для високоефективного математичного моделювання, і Кобол залишається лише тому, що банківська індустрія боїться боятися змінити свій старий / надійний код на нову платформу. C ++ - яскравий виняток, оскільки він все ще дуже широко використовується і прийнятий сьогодні.
Еван Плейс

11

Одна з причин - люди довіряють тому, що говорять інші, а не тому, що вони бачать .

Згідно з тим, що мені сказали, коли я вперше розпочав програмування, Java "повільніше", ніж C ++, і причиною, через яку можна було використовувати Java, є те, що це "зручно і простіше". Дуже часто вважається, що Java забезпечує безпеку та зручність за рахунок продуктивності. Навіть коли винайдено пізніше C #, люди вважають, що це швидше, ніж Java, тому що він "рідний".

Але правда, яку люди бачать, не відчуваючи цього, полягає в тому, що затемнення, IDE, побудований з Java, є абсолютно НАЙБІШНИМ ІДЕ в класі. Я використав майже всі основні IDE потоку, ті з MS та GNU, Borland ..., eclipse - це абсолютний король IDE, багато в чому через це швидко.

Ще одна причина - довгий час запуску .

Java не підходить для розробки крихітного додатка, який залишається в системному треї, забирає небагато пам’яті, відкриває діалогове вікно, що нагадує зробити перерву; або блокнот, який ви використовуєте, щоб відкрити текстовий файл, прочитати його та закрити. Його слід використовувати на чомусь великому, наприклад, на веб-сервері, який завжди є, оптимізувати використання обчислювального ресурсу, відповідати на мільйони запитів щогодини. Або IDE, як затемнення, яке управляє тисячами файлів робочої області. Ви не знаєте, що програма Java швидка, доки вона не працює протягом принаймні декількох годин.


1
Я весь час бачу повільність.
aasc

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 - це певний тип негативного твердження, без відповіді на жодне з вищезазначених питань слід бути відхиленим як дурень. Такі заяви не мають місця в техніці. У політичних та юнацьких чатах, можливо, але не на техніці.

По-друге, більшість цих оманливих дурнів плачуть про те, що Ява повільна, тому що ZOMG, їх затемнення вічно запускається (гей, завантажте річ усіма плагінами і здогадайтесь, що відбувається.) Більшість цих дурнів навіть не знають, як щоб настроїти jvm для eclipse для швидкої роботи (або для будь-якої програми Java з цього питання). Тобто вони не мають поняття про налаштування продуктивності, що є реальністю не тільки для Java, але й для будь-якої нетривіальної системи, будь то апаратне чи програмне забезпечення. Отож, саме там вони обеззброюються для будь-якої технічної обґрунтованості при здійсненні таких безглуздих заяв.

По-третє, давайте розглянемо, для чого основна частина розробки Java: насамперед задній OLTP; системи моніторингу, що надходять на друге місце. Будь-який тип системи призначений для роботи в кластерах і працювати безперебійно протягом тижнів, якщо не місяців. Невже тоді важливо, щоб ваш маленький додаток для затемнення або іграшки завантажувався хвилину-дві, коли мета РЕАЛЬНИХ додатків Java - запускатися протягом тривалого періоду часу? Контекст, люди, контекст.

Нарешті, основи OLTP в Google та Ebay працюють на Java. Я б вважав це суперечливим доказом того, що Java не повільна (принаймні, для важливих умов, не для маленьких експериментів з іграшками, орієнтирів та неперевірених анекдотичних доказів, зроблених спеціально для того, щоб сказати, "що X повільно, це смокче".

Є інженерія, і є фанбоїзм. Відгадайте, до якої категорії висловлювань належать такі?


19
Якщо мені доведеться налаштувати свій JVM, щоб змусити Java працювати швидко, тоді як мені не потрібно нічого налаштовувати (окрім -O2), щоб C ++ запустив швидкий запуск, тоді Java повільна.
Девід Торнлі

@David - Очевидне твердження. Хтось знає, що 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 тупіший за Knuth" не робить X абсолютним німим, оскільки тут може бути майже будь-хто. Я погоджуюсь, що називати lang slow не є елітою, але люди, які говорять про це, не є "німими", а просто випадково зробили згоду на неявне припущення.
yati sagade

1
@luis hahaa .. приємне спостереження. (Моя переконання, що ти є перевтіленням Канта, стала ще більш міцною;)) І такі дискусії закінчуються полум'яними війнами та непродуктивними натисканнями клавіш ... На мою думку, завжди слід дотримуватися того, що здається найкращим інструментом для вирішення. робота під рукою. Погодьтеся, Kant2? : 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
Цей документ дуже далекий від стандартів наукових досліджень. Він навіть не порівнює абсолютно однакові алгоритми та оптимізації на всіх мовах. "E. Tunings Jeremy Manson привів продуктивність Java нарівні з оригінальною версією C ++. Ця версія зберігається в каталозі java_pro. Зауважте, що Джеремі навмисно відмовився від подальшої оптимізації коду, багато з оптимізацій C ++ застосовуватимуться до Java версія також ". jeremymanson.blogspot.com/2011/06/scala-java-shootout.html
Piotr Kolaczkowski

6

TMHO, це через час, необхідний для запуску VM у браузері. Якщо програма запускається повільно, люди пам’ятатимуть це лише. Тому що довгий час початку справді дратує. Дійсно. Один мій колега сказав мені, що він не використовує Firefox, оскільки це занадто повільно. (?!?). Але, так, гаразд, у Windows, Firefox потребує величезної кількості часу, щоб відобразитися. За його словами, це додаток повільний, він зробив свою думку про загальну швидкість його.


Ось чому Mozilla витрачає дуже багато зусиль, щоб Firefox швидко почав працювати ...
Spudd86

2
Це може виявитися як Windows. Так, після входу в систему ви побачите робочий стіл дуже швидко, але тоді вам доведеться почекати деякий час, щоб він зміг реагувати.
Барт ван Хекелом

6

Повільне порівняно з чим? Я думаю про перехід від звичайного Ruby до JRuby (рубін на базі Java), тому що я чув, що це швидше.


1
JRuby це швидше , ніж Ruby, навіть в версії 1.9. Однак розрив закривається.
Дан Розенстарк

2
+1 за вказівку на велику проблему. Хоча я б сказав, що ОП, ймовірно, порівнюється з C # або C ++.
Біллі ONeal

@Yar, ти вказуєш, що CRuby наздоганяє JRUby?

6

Думки - це думки, а факти - факти.

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

Під час минулих видань (2009, 2010, 2011) близько 75% програмістів, які прибули до фінальних раундів, використовували C ++, на відміну від близько 15%, що використовували Java.

Джерело -> http://www.go-hero.net/jam/


3
Це дійсно лише доводить, що Java може досягти вершини конкуренції, орієнтованої на швидкість, але більшість людей обирають C ++.
Адам Лір

3
"вирішити жорсткі обчислювальні проблеми за короткий проміжок часу" - що, час, необхідний для написання коду, або час, необхідний для запуску коду? Незалежно від того, ваш факт полягає в тому, що - факт - що це має відношення до питання? Ви робите висновок із свого факту?
окулус

це може бути лише тому, що 75% людей, які пишуть програми, які змушують фінальні раунди, думають, що Java повільна, ніколи не тестуючи її, і тому замість цього вони використовують C ++, тому що вони вважають, що це швидко, не перевіряючи його.
jwenting

4

Приблизно в 1997 році я використовував HP Vectra VE (200 МГц) і Windows 95. Більшість додатків на цьому працювали дуже швидко, але потім я спробував кілька додатків, написаних на Java (IDE, якщо я правильно пам'ятаю). Вони були дуже повільними, принаймні, частинами GUI. Запускати їх було потрібно багато часу, а елементи графічного інтерфейсу (наприклад, меню) не надто реагували - у візуальній зворотній зв’язку були затримки. Крім того, оскільки додатки Java GUI мали (має) досить характерний вигляд, я навчився асоціювати цей зовнішній вигляд (і Java) з низькою продуктивністю.


2
Я пам’ятаю 1997 рік! Чудовий рік, хоча багато вина - та спостережень - від 1997 року вже не вживаються.
Дан Розенстарк

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

І ви не змінили свою думку 1997 року? Ви помічали, що 2011 рік абсолютно інший, ніж 1997 рік?
Jesper

5
Мій аналіз на основі цих даних буде таким, що 1997 рік висмоктав.
JasonTrue

4

Це залежить від того, що ви маєте на увазі як повільний.

Перш за все, Java, як і раніше, досягла багатьох успіхів і в більшості випадків дуже швидка. Але:

  • Java запускається повільно, тому що вам доведеться завантажувати JVM, перш ніж робити що-небудь.
  • Деякі функції безпеки можуть вбивати виступи в деяких випадках. Примірник перевірки з випадковим доступом є прикладом.
  • Зробити щось по-справжньому швидко в Java потрібно, щоб попрацювати проти JVM (скористатися лінією кеш-пам'яті для зразка).
  • Відсутність метапрограмування передбачає штраф за час виконання з кожною абстракцією, тому продуктивність приходить до вартості дизайну у багатьох випадках.
  • Java навряд чи може забезпечити обмеження в реальному часі - за допомогою дизайну - і це може вважатись «повільним» деякими людьми.

До речі, java в деяких випадках швидше, ніж ванільний C / C ++. Але мови мов дають вам інструменти для їх виправлення.

Java - мова програмування, спрямована на продуктивність. Зараз це досить швидко для більшості програм, але для деяких інших недостатньо.

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


2

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

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


5
Чи можете ви надати джерела цих коментарів? Тобто, де якісь орієнтири, що показують канонічний код на кожній мові, показують, що Java швидша?
Біллі ONeal

1

Ще один момент для "повільності" Java - це 64-бітний час виконання.

Я чув, як деякі люди скаржаться, що Java дуже повільна для них на 64-бітних комп’ютерах. Як виявляється, 64-бітний режим виконання Java використовує сервер JVM, який збирає всю програму перед запуском.

ТУТ пояснюється, чому 64-бітний VM запускається повільніше.

Наприклад у 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 повільніше запуску , але це НЕ спочатку компілювати всю програму , перш ніж почати. Це не могло, класи завантажуються ліниво та потенційно за допомогою рефлексії, тому немає можливості заздалегідь дізнатися, який байт-код потребуватиметься для власного складання.
Ден Дайер

@Dan Dyer Після деяких досліджень схоже, що я неправильно зрозумів те, що читав. Я мав на увазі, що VM Server робить більшу оптимізацію, в той час як клієнт оптимізований для швидкого запуску та зменшення використання пам'яті.
AndrejaKo

сервер VM оптимізований для тривалих запущених процесів, тому попередньо завантажує більше, що призводить до більш тривалого часу запуску і має тенденцію використовувати більше оперативної пам'яті. Клієнтська вітрина оптимізована для нижчого часу та часу запуску, але може мати менші показники виконання.
jwenting

0

Ефективність Java дуже суб'єктивна, проте сприйняття того, чому Java повільна, значною мірою є причинами, які відзначили інші: сприйняття більшості людей чогось забарвлене попереднім досвідом роботи з цим, а Java не завжди була добре оптимізованою мовою. капюшон. Крім того, Eclipse vanilla - це не дуже швидкий IDE, з яким можна працювати і зникає з точки зору чутливості в порівнянні з IDE, як Visual Studio.

Однак це стосується проблем із інтерфейсом, які виникає у Java при запуску, для більшості програм це досить швидко. Якщо ви шукаєте, ви можете знайти статті, які порівнюють його з іншими мовами, і більшість представлених результатів ставлять їх у діапазон, де це буде проблемою лише тоді, коли ви маєте справу з основними наборами даних.

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

Якби було легше написати швидкий інтерфейс на Java, то це зовсім так, що сприйняття швидкості впаде з радару, оскільки більшість людей не нагнітають мов, що швидкість справді є проблемою щодня.


0

Для того, щоб кинути в нікчемну монету, я вважаю, що у веб-сайтів Java, як правило, тривалий час запуску та реакції, коли мені здається, що Python або Ruby могли б зробити краще.

Я використовую Eclipse для більшості моїх програмувань, і я повинен сказати, що Java так само швидко, як і все інше, якщо не швидше працює локально і "автономно".


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

-7

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

Наведу простий приклад. Існує проста оптимізація, яка застосовується при зіставленні списку двічі, яка називається вирубкою лісів: ось для неї написане моєю мовою Felix:

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 повільна. Дуже повільно. [Haskell може зробити це автоматично автоматично, я вважаю].

І перш ніж ви скажете "але Java є мовою OO, така оптимізація не застосовується" .. ну це точно моя думка. Java смокче, і бути OO - одна з головних причин.

Оптимізація JIT ніколи не може бути близькою до конкуренції з тими оптимізаціями, які може зробити гідний компілятор.


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

7
-1 викопати старе запитання і збивати мову з дуже кульгавими аргументами. Скажіть мені, якщо ви хочете детальну інформацію про те, що не так у ваших міркуваннях. Для початку, називати OO як основну причину, яку він смокче, - це не дуже об'єктивно, а фактична продуктивність JVM + JIT дуже хороша, навіть якщо оптимізація відсутня.

8
Haskell нескінченно повільніше, ніж Java для нашої основної платформи, тому що він не переноситься на цю платформу, тому Haskell смокче ...

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