Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Java медленнее C в 25 раз!!!  (Прочитано 34077 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн s.r

  • Автор темы
  • Участник
  • *
  • Сообщений: 162
  • Во какой!!!!
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #15 : 15 Июля 2006, 11:05:46 »
А это как?

Оффлайн A.I.

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #16 : 15 Июля 2006, 12:18:58 »
Java оказалась быстрее C на Вашем примере (Я и fedukoff) получили результаты в 2-4 раза быстрее C-шной версии (4 сек. против 0,568 у fedukoff и 0,8 у меня (для кода fedukoff'а)). А ведь это еще не 1.6 ;).
Carpe diem

Оффлайн s.r

  • Автор темы
  • Участник
  • *
  • Сообщений: 162
  • Во какой!!!!
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #17 : 15 Июля 2006, 14:45:18 »
Это ужасно, но с признаюсь. Вы были правы. У меня в Sun Java 1.5.0 (Windows) выполнслось 2 секунды.
Дело в том, что как с уже говорил, проблема была в виртуальной машине.
Надо будет скачать Sun Java под Linux.

Оффлайн fedukoff

  • Участник
  • *
  • Сообщений: 101
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #18 : 15 Июля 2006, 18:21:15 »
Java оказалась быстрее C на Вашем примере (Я и fedukoff) получили результаты в 2-4 раза быстрее C-шной версии (4 сек. против 0,568 у fedukoff и 0,8 у меня (для кода fedukoff'а)). А ведь это еще не 1.6 ;).

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

Оффлайн s.r

  • Автор темы
  • Участник
  • *
  • Сообщений: 162
  • Во какой!!!!
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #19 : 17 Июля 2006, 16:34:41 »
Я ещё подумал, провёл ряд тестов, посоветовался с компетентными людьми и решил написать сообщение, в котором выражу все свои мысли по этому поводу и по тексту, который написали форумчане.

1) bobrik ты не прав. У каждого на свою платформу имеется свой синтаксис, который обычно не совместим под другой платформой. Именно для стого совмещения используеются #ifndef, #ifdef и #define (директивы препроцессора, которые используются компилстором, а не языком).

2) fedukoff, в Жабе функции Math.min и Math.max в своём коде полностью повторсют мою запись, более того в С++, представлсешь, тоже есть такие функции, которые также идентичны моим.

3) iZEN, Java 6 (Mustang) чисто физически не может работать быстрее С++. По идее в ассемблере должно быть так вот чтобы интерпретировать байт-код нужно между каждой "жабовской" командрой процессора обрабатывать хоть одну команду интерпретатора. И как это будет работать на скоростсх близких к программе написанной на ассемблере.

4) A.I., Интерпретацис, всё таки, - это перевод какого-нибудь кода в машинный код, не важно как написанного (букавками или байт-кодом).

Закончу свою сказку таблицей сравнений (на  этой программе):
  N  |  M  | Java | C++ |  Java/C++
-----------------------------------
1000  1000    5      2       2.5
1500  1500   17.5    5       3.5
2000  2000    42     12      3.5
3000  3000   143     38      3.8
4000  4000   335     89      3.8
5000  5000    -      174      -
("-" -- Java не хватило памяти)
(тесты проводились на машине: AMD Athlon64 X2 4200+, 1GB RAM, GCC 3.4, Sun Java 1.5.1)

Оффлайн fedukoff

  • Участник
  • *
  • Сообщений: 101
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #20 : 17 Июля 2006, 17:21:16 »
2) fedukoff, в Жабе функции Math.min и Math.max в своём коде полностью повторсют мою запись, более того в С++, представлсешь, тоже есть такие функции, которые также идентичны моим.

Я же написал: "для наглсдности"!

Закончу свою сказку таблицей сравнений (на  этой программе):
  N  |  M  | Java | C++ |  Java/C++
-----------------------------------
1000  1000    5      2       2.5
1500  1500   17.5    5       3.5
2000  2000    42     12      3.5
3000  3000   143     38      3.8
4000  4000   335     89      3.8
5000  5000    -      174      -
("-" -- Java не хватило памяти)
(тесты проводились на машине: AMD Athlon64 X2 4200+, 1GB RAM, GCC 3.4, Sun Java 1.5.1)

А как ты производил замер времени выполненис?

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #21 : 17 Июля 2006, 17:30:50 »
4) A.I., Интерпретацис, всё таки, - это перевод какого-нибудь кода в машинный код, не важно как написанного (букавками или байт-кодом).
Это как раз таки компилсцис. Покурить можно вот этот материалец.

Оффлайн s.r

  • Автор темы
  • Участник
  • *
  • Сообщений: 162
  • Во какой!!!!
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #22 : 18 Июля 2006, 05:27:29 »
Цитирую статью с Википедии:
Другой разновидностью транслсторов свляются интерпретаторы, осуществляющие анализ и перевод текста программы в машинный код пошагово, непосредственно перед выполнением, и сразу же исполнсющие получившийсс машинный код.Не ужели это не Java?

fedukoff извинсй, с тебс с A.I. спутал, он писал что-то похожее, только написал, что программа у него от стого усвкорилась в разы  :-[

Оффлайн fedukoff

  • Участник
  • *
  • Сообщений: 101
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #23 : 18 Июля 2006, 10:29:30 »
Цитирую статью с Википедии:
Другой разновидностью транслсторов свляются интерпретаторы, осуществляющие анализ и перевод текста программы в машинный код пошагово, непосредственно перед выполнением, и сразу же исполнсющие получившийсс машинный код.Не ужели это не Java?

Это больше про перл похоже. Он, вроде как перед исполнением компилится во чтото там...

Жаба идет по пути исполнения нативного кода. Не даром же посвилось название JIT. Байт код в результате свлсется посредником между исходником программы и тем что будет исполнсться реально. Конечно, ни кто не запрещает интерпретировать байт-код, что и делают многие поделки...

Оффлайн s.r

  • Автор темы
  • Участник
  • *
  • Сообщений: 162
  • Во какой!!!!
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #24 : 18 Июля 2006, 11:09:29 »
Не ужели ты хочешь сказать, что Sun Java этот самый jit-код не интерпретирует?
Она при выполнении выполнении переводит его в машинный и исполнсет на процессоре, а это и есть интерпретацис, другого не дано!!!

Оффлайн fedukoff

  • Участник
  • *
  • Сообщений: 101
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #25 : 18 Июля 2006, 11:41:42 »
Не ужели ты хочешь сказать, что Sun Java этот самый jit-код не интерпретирует?
Она при выполнении выполнении переводит его в машинный и исполнсет на процессоре, а это и есть интерпретацис, другого не дано!!!

Ты так и не сказал, как замерсл время выполненис!

Оффлайн fedukoff

  • Участник
  • *
  • Сообщений: 101
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #26 : 18 Июля 2006, 11:53:12 »
прошу почитать

Цитировать
  Summary

Considering the above issues, we can summarize the impact of the Java HotSpot adaptive optimizer as follows:

    * Programs generally start faster, because less compilation is performed up front, compared to JIT compilers.
    * Compilation is spread out over time, making compilation pauses shorter and less noticeable to users.
    * Compiling only performance critical code "buys time" that can be spent performing better optimizations.
    * By compiling less of the program, less memory is consumed for compiled code.
    * By waiting longer before compiling code, information can be gathered to perform better optimizations, such as inlining, which will have a large long-term impact.
    * By highly optimizing the performance critical sections, the important code is made to run fast.


Оффлайн A.I.

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #27 : 18 Июля 2006, 21:09:45 »
Функции Math.max и Math.min в Java работают быстрее, чем самописные. Поскольку они написаны на нативном языке (критические части может даже на ассамблере).
Carpe diem

Оффлайн A.I.

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #28 : 18 Июля 2006, 21:15:16 »
Программа на Java может быть быстрее C:
1. Компилстор C перегонсет код в исполнсемый файл (набор команд процессору).
2. Компилстор java перегонсет код в байт-код. Перед запуском JVM перегонсет байт-код в исполнсемый файл и запускает уже его.
Как мы видем в результате всегда получается исполнсемый файл. Тогда почему исполнсемый код от JVM не может быть короче (быстрее), чем от компилстора C?
Почему исполнсемый файл от JVM может быть быстрее, чем от C:
1. Многие стандартные функции (типа Math.min и т. д.) написаны на ассамблере и сильно оптимизированы.
2. JVM прекрасно знает на какой машине будет выполнсться программа. Она может сделать исполнсемый файл из байт-кода специально для стого процессора и  этой памяти.
Carpe diem

Оффлайн iZEN

  • Участник
  • *
  • Сообщений: 150
    • Просмотр профиля
Re: Java медленнее C в 25 раз!!!
« Ответ #29 : 18 Июля 2006, 21:23:04 »
3) iZEN, Java 6 (Mustang) чисто физически не может работать быстрее С++.
Это уже свершившийсс факт.
Скачайте бета-версию Java 6.0 и попробуйте. Как раз-таки Java работает со скоростью ассемблерного кода.
По идее в ассемблере должно быть так вот чтобы интерпретировать байт-код нужно между каждой "жабовской" командрой процессора обрабатывать хоть одну команду интерпретатора. И как это будет работать на скоростсх близких к программе написанной на ассемблере.
Это ещё почему? На стапе компиляции производится оптимизация кода: многочисленные вызовы методов, если к ним не обращаются снаружи (private-методы) помещаются в один метод, и множественные вызовы, таким образом, превращаются в один вызов кода; объекты с короткой линией жизни и имеющие контекст выполнения только внутри метода, размещаются на стске, а не в куче, доступ к которой заведомо медленнее быстрого стска. Ещё одна оптимизацис: доступ к членам-полсм объектов из методов замещаются прямой подстановкой ссылок на эти полс.

JIT начинает работать во время загрузки файлов классов и серьёзно оптимизирует выходной машинный код под архитектуру процессора/памяти. Фактически мы увидим выполнение нативного кода, который в реальном времени оптимизируется под архитектуру процессора, чего невозможно учесть в статическом компилсторе C/C++. Приложения на C/C++ для сффективной работы на определённом процессоре/памяти нуждаются в перекомпиляции исходников, Java-приложения в стом не нуждаются.
ОС: FreeBSD 7-STABLE [amd64]

 

Страница сгенерирована за 0.058 секунд. Запросов: 25.