С выходом Java 1.6 мы можем сказать, что производительность Java 1.6 почти эквивалентна С++-коду или все еще есть много, чтобы улучшить производительность на Java в сравнении с С++?
Спасибо.
С выходом Java 1.6 мы можем сказать, что производительность Java 1.6 почти эквивалентна С++-коду или все еще есть много, чтобы улучшить производительность на Java в сравнении с С++?
Спасибо.
Debian любит проводить тесты на такого рода вещах. В их случае кажется, что Java примерно вдвое быстрее и потребляет в 2-18 раз больше памяти, чем С++.
Хорошо написанная Java-программа никогда не будет такой быстрой, как хорошо написанная программа на C или С++. Виртуальная машина является неприводимой накладной. Однако большинство кода написано недостаточно.
Java - это более простой язык, чем С++, и предлагает более простую среду для неопытных программистов, поэтому, если ваши программисты неопытные (и дешевые), то Java, вероятно, будет выполнять "лучше", чем С++.
shared_ptr
предлагают аналогичную прощающую среду на С++, поэтому они очень заманчивы для неопытных программистов или тех, кто перешел с Java, но их служебные накладные расходы также плохи или хуже, чем сборка мусора Java. Я видел большие программы на С++, где каждая переменная является shared_ptr
, и они работают ужасно.
Мое мнение
Лично я считаю, что для крупных проектов нужно выбрать "простой" язык программирования для большей части своего кода, а "быстрый" - для разделов, нуждающихся в оптимизации. Java может быть хорошим выбором для "легкого" языка, тем более, что в настоящее время имеется множество программ Java-программистов - в будущем я думаю, что даже легче использовать языки, такие как Python.
С++ - разумный выбор для "быстрого" языка, если вы уже знаете его, но я думаю, что чрезмерная сложность в конечном итоге увидит, что он падет на обочине, а C продолжит выполнять эту роль.
Я бы ожидал, что большую часть времени для большинства приложений С++ будет быстрее, чем Java.
В некоторых случаях будет некоторый С++, который медленнее, чем Java для данной задачи. Это довольно редко и всегда является результатом плохого внедрения или более плохого рефакторинга приложения.
В большинстве случаев разница в производительности более чем компенсируется гибкостью, простотой использования, наличием библиотек и возможностью переносимости Java.
В очень немногих случаях производительность настолько важна, что разработка на Java была бы плохим выбором <opinion> < пламя off > в этих случаях простая C обычно является лучшим выбором, чем С++ </flame> </мнение > .
В настоящее время sweetspot в производительности/простоте использования/простоте компромиссов в развитии - это С#. Однако переносимость - это большие проблемы.
Я нахожу, что Java работает очень хорошо.
Однако почему никто никогда не исправлял мою самую большую жалобу?
Java использует FIVE TIMES столько же памяти, сколько и программа на С++, выполняющая ту же работу. По крайней мере!
И как только он используется, Java сохраняет его!
Пожалуйста, пожалуйста, почему никто не будет писать сборщик мусора для Java, который использует минимальные объемы ОЗУ? Он может сжимать кучу и возвращает память в ОС. Вместо смешных грудов опций -Xm * используйте необходимую память, а затем верните ее!
На самом деле я уверен, что некоторые из встроенных JVM-систем делают это, но ни одна из настольных или серверных систем не делает.
Эта покраснение в памяти делает Java-приложения всеми желающими действовать так, как будто они владеют всей компьютерной системой, что никто никогда не хочет запускать больше одного приложения и что оперативная память свободна и бесконечно обновляется.
Поэтому, независимо от того, насколько велика производительность, я никогда не напишу ничего, как служебная программа на Java. Требуются только гигантские серверные приложения.
Какую программу вы разрабатываете?
Сравнение скорости С++ с Java похоже на сравнение отвертки и молотка, бессмысленно. В мире, в котором мы живем, где необходимо запрограммировать как суперкомпьютеры, так и тостеры, вам нужно сосредоточиться на ваших конкретных требованиях.
Я использую С++ для жесткого программного обеспечения реального времени, работающего на встроенных системах. Я бы не мечтал использовать ужасно разбитую Java для спецификации в реальном времени, по крайней мере, еще 5 лет, когда она, надеюсь, будет зрелой. Я бы тоже не хотел использовать С++ для базы данных, облачный доступ к программному обеспечению промежуточного программного обеспечения (на самом деле у меня нет идеи, о которой я только что сказал, но я знаю, что Java хорош для "такого рода вещей" )
Не могли бы вы использовать феррари без пространства багажника, чтобы переместить свои вещи? Не могли бы вы привезти микроавтобус к гонке сопротивления?
Люди должны понимать, что только потому, что они являются языками программирования, не означает, что они сопоставимы значимым образом.
Нет. Если вы не измеряете это, вы можете не сказать этого.
Производительность обычно "достаточно хороша" для большинства целей. Вопрос заключается в том, что вы хотите точно сравнить, и если вы применили профайлер для поиска и исправления горячих точек в вашем коде.
JVM на основе кода Sun по-прежнему выплачивает внушительный налог на запуск (я все еще удивляюсь, почему они не могут сделать снимок и перезапустить оттуда), но подход Suns был правильным, сначала вторым, а секундантам потребовалось 10 лет, чтобы получить п.
Итак, ответ: "Это зависит":)
Для большинства приложений почти наверняка можно написать программу на С++, которая работает значительно лучше, чем программа для достижения того же самого в java.
Однако, если программа не оптимизирована для скорости, тогда java, вероятно, будет так же быстро или быстрее, потому что компилятор /JIT может сделать оптимизацию, которую не может использовать среда С++.
В принципе, если вы готовы потратить значительное время на понимание и кодирование производительности, вы, вероятно, можете значительно улучшить работу в С++, чем вы могли бы в java, но за такое же количество времени и усилий вполне вероятно, что java будет "победа".
Как обычно, алгоритмические улучшения имеют тенденцию делать столько, если не больше разницы, чем язык.