Задать вопрос

Java — тормозит, а Cи — нет?

Я вообще не разбираюсь в Java и С++ знаю не сказать, что профессионально. Вопрос нубский.

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

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

Прав ли я в своем мнении?
  • Вопрос задан
  • 8180 просмотров
Подписаться 12 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 8
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Программы на C/C++ работают быстрее за счёт отказа от контроля всего и вся (расхода памяти, переполнения стека, корректности указателей), за счёт явной и жёсткой типизации переменных, за счёт меньшего количества обёрток вокруг типов данных. Но это позволяет программисту выстрелить себе в ногу таким количеством способов, которые в Java и не снились.
Ответ написан
yaroslavkornilov
@yaroslavkornilov
https://taplink.cc/the.yaroslav.kornilov
Что более тормозное русский или китайский язык? По - моему китайский, а китайцу кажется, что русский более тормозной.
Теоретически С++ МОЖЕТ быть быстрее из-за того что он сразу "переводится" в машинный код, но это несет за собой уменьшение управляемости и скорости написания кода.
Но в реальности расход ресурсов зависит от архитектуры программы и используемых алгоритмов.
Поэтому однозначно сказать нельзя.
Ответ написан
Комментировать
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Соглашусь, что ява медленная лишь отчасти. Медленная она только в одном - при старте приложения. Далее, когда приложение уже стартануло и произвела всю компиляцию JIT, то скорость очень даже сравнима с с кодом на C/C++. Ну так меделнный старт свойственен всем языкам с виртуалкой и тут нечего плакаться. Ну-ка попробуйте за недельку сделать приложение с динамической подгрузкой плагинов, работой с базой, балансингом и обслуживающий тысячи коннектов. Если получилось это на C/C++, то поздравляю, но у вас получился неуклюжий глючный монстр, вылетающий в core.
Ответ написан
Комментировать
В таких случаях я всегда вспоминаю цитату из рекламы "просто ты не умеешь их готовить"

Природу не обманешь. И для Java и для C++ все выливается в native-код, который выполняется одинаково. И, например, начиная в С++ с прямой работой с буферами (якобы для ускорения) человек приходит к "умным указателям", собственным аллокаторами, а в хорошем случае к библиотекам (boost, stl).

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

И еще мысль. В большинстве случаев тенденция такова, что важнее, чтобы код создавался быстрее, а не выполнялся. "Узкие", особые места оптимизируются по алгоритму предложенному xandox выше в ответах.
Ответ написан
Комментировать
@xandox
Да не, и на java можно писать так что бы не тормозило. Только почему-то никто этого не делает...
Ответ написан
@odissey_nemo
Программист, ГИС-системы, растры, космоснимки
Числодробительный код на Java примерно в 2-3 раза медленнее, чем на С++ или, скажем, Delphi. Так кажется на собственной субъективном опыте. Т.к. на Java слишком много разных фич пристыкованы в байт-коде чисто механически.

Но писать программы со вполне удовлетворительным быстродействием вполне можно. Даже нумерологические. Скажем, полная обработка растров размерами 10000 на 10000 (бинаризация или другие матричные фильтры) средствами собственного кода (без нативных библиотек) вполне отрабатывает за секунды. Не утомляя пользователя. Но!Тут и встаёт вопрос о знании алгоритмов, вернее, какой где стоит применить.
Ответ написан
Комментировать
heksen
@heksen
си - получше будет
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы