Производительность Java 1.6 vs С++?

С выходом Java 1.6 мы можем сказать, что производительность Java 1.6 почти эквивалентна С++-коду или все еще есть много, чтобы улучшить производительность на Java в сравнении с С++?

Спасибо.

Ответ 2

Хорошо написанная Java-программа никогда не будет такой быстрой, как хорошо написанная программа на C или С++. Виртуальная машина является неприводимой накладной. Однако большинство кода написано недостаточно.

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

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

Мое мнение

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

С++ - разумный выбор для "быстрого" языка, если вы уже знаете его, но я думаю, что чрезмерная сложность в конечном итоге увидит, что он падет на обочине, а C продолжит выполнять эту роль.

Ответ 3

Я бы ожидал, что большую часть времени для большинства приложений С++ будет быстрее, чем Java.

В некоторых случаях будет некоторый С++, который медленнее, чем Java для данной задачи. Это довольно редко и всегда является результатом плохого внедрения или более плохого рефакторинга приложения.

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

В очень немногих случаях производительность настолько важна, что разработка на Java была бы плохим выбором <opinion> < пламя off > в этих случаях простая C обычно является лучшим выбором, чем С++ </flame> </мнение > .

В настоящее время sweetspot в производительности/простоте использования/простоте компромиссов в развитии - это С#. Однако переносимость - это большие проблемы.

Ответ 4

Я нахожу, что Java работает очень хорошо.

Однако почему никто никогда не исправлял мою самую большую жалобу?

Java использует FIVE TIMES столько же памяти, сколько и программа на С++, выполняющая ту же работу. По крайней мере!

И как только он используется, Java сохраняет его!

Пожалуйста, пожалуйста, почему никто не будет писать сборщик мусора для Java, который использует минимальные объемы ОЗУ? Он может сжимать кучу и возвращает память в ОС. Вместо смешных грудов опций -Xm * используйте необходимую память, а затем верните ее!

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

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

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

Ответ 5

Какую программу вы разрабатываете?

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

Я использую С++ для жесткого программного обеспечения реального времени, работающего на встроенных системах. Я бы не мечтал использовать ужасно разбитую Java для спецификации в реальном времени, по крайней мере, еще 5 лет, когда она, надеюсь, будет зрелой. Я бы тоже не хотел использовать С++ для базы данных, облачный доступ к программному обеспечению промежуточного программного обеспечения (на самом деле у меня нет идеи, о которой я только что сказал, но я знаю, что Java хорош для "такого рода вещей" )

Не могли бы вы использовать феррари без пространства багажника, чтобы переместить свои вещи? Не могли бы вы привезти микроавтобус к гонке сопротивления?

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

Ответ 6

Нет. Если вы не измеряете это, вы можете не сказать этого.

Ответ 7

Производительность обычно "достаточно хороша" для большинства целей. Вопрос заключается в том, что вы хотите точно сравнить, и если вы применили профайлер для поиска и исправления горячих точек в вашем коде.

JVM на основе кода Sun по-прежнему выплачивает внушительный налог на запуск (я все еще удивляюсь, почему они не могут сделать снимок и перезапустить оттуда), но подход Suns был правильным, сначала вторым, а секундантам потребовалось 10 лет, чтобы получить п.

Итак, ответ: "Это зависит":)

Ответ 8

Для большинства приложений почти наверняка можно написать программу на С++, которая работает значительно лучше, чем программа для достижения того же самого в java.

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

В принципе, если вы готовы потратить значительное время на понимание и кодирование производительности, вы, вероятно, можете значительно улучшить работу в С++, чем вы могли бы в java, но за такое же количество времени и усилий вполне вероятно, что java будет "победа".

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