Страница 1 из 1

Да, FPC (опять) "порвал" Java...

СообщениеДобавлено: 24.01.2024 16:01:13
grot
Тут понадобилось мне померить производительность Java в реальных задачах на разных OS / компах ...
Вспомнил про статью :

Александр Савиных
Тест производительности кода Java и FPC на Anrdoid'е
10.03.2014

http://freepascal.ru/article/freepascal/20140310080000/

... выкинул всю привязку к Anrdoid и получились универсальные тесты :

на Core 2 Duo T9300 , Win 64 :

java -version
openjdk version "17.0.6" 2023-01-17
OpenJDK Runtime Environment Temurin-17.0.6+10 (build 17.0.6+10)
OpenJDK 64-Bit Server VM Temurin-17.0.6+10 (build 17.0.6+10, mixed mode, sharing)

Код: Выделить всё
XML Document loaded; time spent: 0.172260886 seconds
Matrices in list: 205 items
Load matrix array from xml: time spent: 0.07759324000000001 secs
Items in array: 102
matrix products calculated; time spent: 0.0042400630000000005 secs
empty cycle; time spent: 0.07581977200000001 secs
Save matrix array to xml document: 0.04676881 seconds
Save xml document to file: 0.33610939900000003 seconds


Потом думаю, а что наш FPC ( 3.2.2 )
на той-же машине с теми-же тестовыми данными :

Код: Выделить всё
Now unpacking data...
Got data: 298448 bytes; time spend: 0.000319
Pharsed XML data; time spent: 0.023625
Matrices in list: 102 items
Load matrix list from xml: time spent: 0.006715
matrix products calculated; time spent: 0.001191 secs
Save matrix array to xml document: 0.008561 seconds
Save xml document to file: 0.007034 seconds
empty cycle; time spent: 0.221866 secs


Вот опять FPC обошел Java c неприлично большим отрывом ...

Re: Да, FPC (опять) "порвал" Java...

СообщениеДобавлено: 24.01.2024 18:30:25
Sharfik
Это скомпилированная предварительно java?

Re: Да, FPC (опять) "порвал" Java...

СообщениеДобавлено: 24.01.2024 23:47:30
grot
Да , запускалась из командной строки несколько раз , для разогрева кэша,
как
java -jar test.jar

FPC :
Консольная программа _ Прямо из Lazarus под Debugger и без оптимизаций ...

Re: Да, FPC (опять) "порвал" Java...

СообщениеДобавлено: 25.01.2024 00:04:18
xchgeaxeax
Вы пытаетесь сравнивать скорость работы байткода и программы из аппаратных инструкций? Разумеется программа на FPC будет в разы быстрее т.к. ей не нужна трансляция перед исполнением. Байткод Java хоть и быстрый, но все же это отчасти скрипт, исполняющийся другой программой.

Re: Да, FPC (опять) "порвал" Java...

СообщениеДобавлено: 25.01.2024 00:23:31
grot
Никогда не думал, что придется когда-то защищать Java ...

В вопросах компиляции они уже многих "обскакали" ( С, С++ и т.д. ):
JIT-компиляция
[url]
https://ru.wikipedia.org/wiki/JIT-%D0%B ... 0%B8%D1%8F
[/url]

Еще более интересные результаты можно получить при сравнении постоянно работающих сервисов,
а не консольных приложений, выполняемых 1 раз.
Замечено, что сервис на Java выходит на "проектную мощность" только после 3 вызовов,
при каждом из 3 вызовов производительность заметно растет - а потом стабилизируется !

Сервисы на Node.js - постоянный низкий результат ( хотя ходят упорные слухи, что там под капотом тоже JIT-компиляция, которая экспериментально не была обнаружена ! ).

Сервисы на FPC - постоянный высокий результат.

Re: Да, FPC (опять) "порвал" Java...

СообщениеДобавлено: 25.01.2024 14:30:47
sts
grot писал(а):JIT-компиляция

но в вашем тесте нет ее, чтоб она включилась надо 10000 исполнений (чтото такое по умолчанию).

Re: Да, FPC (опять) "порвал" Java...

СообщениеДобавлено: 25.01.2024 17:58:44
stikriz11
grot писал(а):при каждом из 3 вызовов производительность заметно растет

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

Re: Да, FPC (опять) "порвал" Java...

СообщениеДобавлено: 26.01.2024 16:39:42
Sharfik
stikriz11 писал(а):Мой первый учитель по программированию на мою радостную весть, что программа заработала в пять раз быстрее сказал, мол, это же надо было так херово написать сначала...

Я так графический редактор делал. Медленно обновлялся чертеж, пока не вспомнил что в генераторе ID сделал sleep(1).

grot писал(а):Да , запускалась из командной строки несколько раз , для разогрева кэша,
как
java -jar test.jar
FPC :
Консольная программа _ Прямо из Lazarus под Debugger и без оптимизаций ...

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