Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

Java vs Delphi   Найти похожие ветки 

 
StarCon   (2004-06-29 10:38) [0]

Нами были проведены тесты быстродействия языков Delphi и Java на математических операциях *,/,+,- плавающей арифметики. Для делфи был использован код:

var
 t:cardinal;
 i:integer;
 v,v1,v2,v3,v4,v5,v6:double;
begin
 v:=2.674374;
 v1:=0.6748345;
 v2:=9.43924347;
 v3:=67.26357244;
 v4:=4.82736832;
 v5:=0.78473924839;
 v6:=2.94739473982;

 t:=GetTickCount();

 for i:=0 to 100000000 do
 begin
   v:=v1*v2+v3/v4-v;
 end;

 Edit1.Text:=IntToStr((GetTickCount()-t));

Для Java:

public final int max_count = 100000000;

   public Java_Test() {
       test();
   }

   public void test() {

       double v = 2.674374;
       double v1 = 0.6748345;
       double v2 = 9.43924347;
       double v3 = 67.26357244;
       double v4 = 4.82736832;
       double v5 = 0.78473924839;
       double v6 = 2.94739473982;

       long bt = System.currentTimeMillis();

       for (int i = 0; i < max_count; i++) {
           v = v1 * v2 + v3 / v4 - v;
       }

       long et = System.currentTimeMillis();

       long time = et - bt;

       System.out.println("Time: " + Long.toString(time) + ";");

   }

Испытания проводились на одной и той же машине.

Были получены следующие результаты в милисекундах в серии из пяти испытаний:

Delphi:  2584.2 мс.
Java:     2353.2 мс.

Т.е. java оказалась быстрее delphi на 231 мс. или на 8.94%!

Кто теперь скажет что java медленнее delphi?


 
Иванов Александр   (2004-06-29 11:07) [1]

Эксперимент не совсем "чистый" для Java вы сделали консольное приложение, а для Delphi - нет. Так что прибавьте время на перерисовку. Или повторите эксперимент.


 
StarCon   (2004-06-29 11:13) [2]

сделал консольное:
var
 t:integer;
 i:integer;
 v,v1,v2,v3,v4,v5,v6:double;
begin
 {$APPTYPE CONSOLE}

 v:=2.674374;
 v1:=0.6748345;
 v2:=9.43924347;
 v3:=67.26357244;
 v4:=4.82736832;
 v5:=0.78473924839;
 v6:=2.94739473982;

 t:=GetTickCount();

 for i:=0 to 100000000 do
 begin
   v:=v1*v2+v3/v4-v;
 end;
 WriteLn(IntToStr((GetTickCount()-t)));
end.

как ни странно, но время стало еще больше на 16 мс.
есть еще какие предположения почему так происходит?


 
TUser ©   (2004-06-29 11:26) [3]

Жаву не знаю, но первый вопрос - а тип double там точно соответствует double в delphi. Что касается скорости - верю в то, что интерпретируемое приложение (все-таки ведь интерпретируемое, как его ни называй) не может быть быстрее скомпилированного.


 
wicked ©   (2004-06-29 11:29) [4]

хы-хы... код не эквивалентный - на паскале он будет исполняться на одну итерацию больше... :)
хотя, судя по такой оплошности, вызывает сомнения сам тест - например, совсем неизвестно, с какими настройками скомпилированы оба приложения...


 
Sandman25 ©   (2004-06-29 11:29) [5]

uses покажите


 
Иванов Александр   (2004-06-29 11:38) [6]

Примитивные типы в Java - тоже платформенно независимые, хотя это не причина работать быстрее :).


 
StarCon   (2004-06-29 11:41) [7]

uses   SysUtils, Windows, Unit1 in "Unit1.pas" {Form1};


 
StarCon   (2004-06-29 11:42) [8]

wicked - может подскажешь, какие настройки для дельфи поставить, чтобы было быстрее?


 
pasha_golub ©   (2004-06-29 11:43) [9]

Это не тест, а черт знает что. :-)


 
Anatoly Podgoretsky ©   (2004-06-29 11:44) [10]

Отключить все проверки и FPU коррекцию ошибки.


 
Dmitriy O. ©   (2004-06-29 11:45) [11]

Тут тоже ктот не давно тесте проводил по скорости в моей ветке
"Где найти компилятор Java и как он называется" Там Java со строками тоже быстрее работала. И были этому какието обьяснения.
Вощем Java рулит. Сечас особенно идет тенденция к переводу софта на Java.


 
pasha_golub ©   (2004-06-29 11:48) [12]

Еще раз обращаю внимание на то, о чем говорил wicked ©   (29.06.04 11:29) [4]

    for (int i = 0; i < max_count; i++)
// тут имеем 100000000 итераций
     for i:=0 to 100000000 do
// тут имеем 100000000 итераций + одну итерацию. Это что не видно?


 
Иванов Александр   (2004-06-29 11:50) [13]


> pasha_golub ©

Одна итерация из 100000000 повлияла на результат?


 
Anatoly Podgoretsky ©   (2004-06-29 11:51) [14]

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


 
pasha_golub ©   (2004-06-29 11:52) [15]

Иванов Александр   (29.06.04 11:50) [13]
Это не важно! Если автор теста не заметил такую вещь, откуда я могу знать, что еще не учтено? ;-)


 
Dmitriy O. ©   (2004-06-29 11:52) [16]


> pasha_golub ©   (29.06.04 11:48) [12]
И что на одну и итерацию тратится 300 мск ?
Все равно даже если это так Java работает по крайне мере адекватно Delphi а не тормозно как многие утверждали.
Вот даже марсаходы работают на Java.


 
wicked ©   (2004-06-29 11:54) [17]

у меня получилось
{$A+,B-,C-,E-,F-,H+,I-,J-,K-,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Z1}


 
wicked ©   (2004-06-29 11:56) [18]

настройки компилятора в смысле...


 
pasha_golub ©   (2004-06-29 11:56) [19]

Dmitriy O. ©   (29.06.04 11:52) [16]
Фух, Дима, ну ты и даешь. Могу пожелать удачи марсоходам. Дай мне только ссылку, где это четко сказано.

Java не работает адекватно, е-мое. Пусть арифметические операции работают примелимо, допустим. Но кроме этого есть еще много других аспектов.


 
Иванов Александр   (2004-06-29 12:00) [20]

Я очень не доверяю сборщикам мусора. В данном примере его работа минимальна.


 
PVOzerski ©   (2004-06-29 12:02) [21]

Рискну кое-что сказать и я, хоть и ориентируюсь не только на свой опыт, а с Java сам не работал.
1) Java - это не совсем интерпретатор, скорее - "компилятор at run-time".
2) Вот есть у меня такое наблюдение. Запускаешь тестовую прогу 1-й раз, получаешь значение быстродействия. Запускаешь 2-й раз - получается, что считает быстрее. Я не знаю, как там ОС делит процессор между задачами, что кэширует - голая эмпирика. Но факт.


 
Dmitriy O. ©   (2004-06-29 12:05) [22]


> Дай мне только ссылку, где это четко сказано.
Sun хочет сделать Java мэйнстримом для корпоративного ПО  28.06.04 13:40 CNews
... известного как API, ранее используемая NASA в системе контроля миссии на Марс.
Сюжет полностью (7) >>
http://www.cnews.ru/newsline/index.shtml?2004/06/28/160621


 
wicked ©   (2004-06-29 12:07) [23]


> Вощем Java рулит. Сечас особенно идет тенденция к переводу
> софта на Java.

голоса из прошлого?... дарагой, Java рулила лет 5 - 7 назад и то в умах некоторых нестабильных личностей...
сейчас Java заняла свою нишу, и то её пытается вытеснить (и весьма успешно) microsoft со своим .net...


 
pasha_golub ©   (2004-06-29 12:12) [24]

Ну, что украинофоб, Дима?
Цитата:

"Напомним, что Project Looking Glass – это ПО, предназначенное для создания трёхмерной среды для десктопов с прозрачными окнами, вращением объектов и другими характеристиками. Java 3D – это часть программного кода, известного как API, ранее используемая NASA в системе контроля миссии на Марс."

ТО есть в ЦУПе для визуализации эту Жаву использовали, а не для марсоходов. Это, раз. Во-вторых, по всей статье разбросано "будет", "собирается" и т.п.



 
wicked ©   (2004-06-29 12:12) [25]

цитата из статьи по ссылке http://www.cnews.ru/newsline/index.shtml?2004/06/28/160621 :

Напомним, что Project Looking Glass – это ПО, предназначенное для создания трёхмерной среды для десктопов с прозрачными окнами, вращением объектов и другими характеристиками. Java 3D – это часть программного кода, известного как API, ранее используемая NASA в системе контроля миссии на Марс.

ну и где здесь про то, что Java на марсоходах стоит?... вот о том, что на НАСовских десктопах - есть, рисует ландшафты она там...


 
wicked ©   (2004-06-29 12:13) [26]

[24]
[25]

:))


 
Dmitriy O. ©   (2004-06-29 12:18) [27]

Блин о том что проги на Java управляют марсаходами твердят уже пол года а вы еще о них не слышали. Вот ссыл ки в Яндех
по ключевам словаи "марс&java"
http://www.yandex.ru/yandsearch?text=%EC%E0%F0%F1%26java&stype=www&nl=0
Цитаты
pdf) Программирование на Java
... США, занимающаяся исследованием космоса) с помощью Java-апплетов управляют роботом, изучающим поверхность Марса ("Java помогает делать историю! ...
www.javagu.ru/files/course/Java_COURSE_Lec01.pdf (279 КБ) 12.05.2003 — совпадение фразы
Сохраненная копия  ·  Похожие документы  ·  Еще с сайта (3)

Свет в Internet
И, опять же при помощи Java, управляется марсоход Spirit, который только что искал на поверхности Марса следы воды и жизни.
www.lightnet.obninsk.ru/news/show_news.php?news_id=720 (9 КБ) — строгое соответствие
Найденные слова  ·  Похожие документы  ·  Рубрика: Интернет


 
pasha_golub ©   (2004-06-29 12:21) [28]

Dmitriy O. ©   (29.06.04 12:18) [27]
Да е-мое, ну скоко можно, ты различаешь апплет и сервлет? Мля, ну сил моих нету. Управляли апплетом - это значит в ЦУПе на десктопе, а вот если бы управляли сервлетом - это значит на марсоходе стоит!


 
iZEN ©   (2004-06-29 12:57) [29]

У меня тоже кое-что есть:
"Тесты производительности платформ"
http://izen5.by.ru/projects/projects.html#benchmarktest

Вычисления с плавающей точкой и Комбинаторика на Java и Delphi - сравнивайте, думайте.


 
StarCon   (2004-06-29 13:02) [30]

iZEN © - спасибо!


 
Danilka ©   (2004-06-29 13:04) [31]

А заодно можно сравнить, например, vcl и swing и тоже подумать.
:))


 
iZEN ©   (2004-06-29 13:13) [32]

to Danilka ©   (29.06.04 13:04) [31].
...в философском смысле: почему тупая и быстрая VCL многим кажется лучше, чем красивая и медленная Swing.


 
Ломброзо ©   (2004-06-29 13:47) [33]

По сравнению с MFC VCL гармонична и стройна.


 
Паниковский ©   (2004-06-29 14:45) [34]

Ломброзо
очень она гармонична чем тебе MFC не понравился?


 
Mystic ©   (2004-06-29 15:23) [35]

Нами были проведены тесты быстродействия языков Delphi и Java на математических операциях *,/,+,-

Кем это --- нами?

Кроме того, скорее всего это тест не на быстродействие, а на качество оптимизатора. Наиболее навороченый компилятор (скажем, Intel C++) сумел бы заменить цикл

for i:=0 to 100000000 do
begin
  v:=v1*v2+v3/v4-v;
end;

на

a := v1*v2+v3/v4;
for i:=0 to 100000000 do
  v := a - v;
 
или даже на

v := PRE_CALC_RESULT; // = v или a-v

Основные проблемы Java, судя по этим тестам, это работа с хипом:

http://www.rsdn.ru/article/devtools/perftest.xml


 
NickD   (2004-06-29 15:45) [36]

Так до сих по никто  не успокоился?

Delphi это ведь не только "голый" Object Pascal и не только "голый"
VCL, который является надстройкой над системными АПИ. Delphi - в первую очередь это не Run-time компилятор, как вы изволили заметить. И если что - то быстре работает на Java написанное "Вот так", то на Delphi это будет работать быстрее написанное "Вот эдак".

Да, язык Java - без сомнения достаточно удобный и современный язык, который способен решать достаточно большое количество задач, к которым в первую очередь можно отнести кросс-платформенность , использование скриптов и скриптовых движков (как в браузерах),  и т.д.

Но давайте, если вы сравниваете конкретно Delphi, то сравнивайте и конкретную Java (с учетом конкретного JIT или JVM или JS или что там еще существует). С учетом того, что и то и то средство имеет несколько путей решения одной и той же задачи.

JIT-компитлятор не может быть быстрее native-программы по определению (т.к. сам явялеется native-программой) (без учета исполнения этих native-программ). Думаю, что этот абзац многим не понравится. Что ж учтите все, тогда и можно будет спорить.

Согласен с (29.06.04 11:51) [14] и к тому же еще сущетствуют АСМ процедуры, что так же является одним из средств Delphi


 
Nick Denry ©   (2004-06-29 15:47) [37]

NickD всмысле Nick Denry


 
StarCon   (2004-06-30 09:02) [38]

jdk новый, версия 1.5.0 beta
вот что интересно - оптимизировал я код, как указал Mystic в дельфи, время выполнения значительно уменьшилось
НО! оптимизировав так же жаба-код опять получаю что жаба значительно быстрее, несмотря на то что работает через виртуальную машину. как так получается?


 
Dmitriy O. ©   (2004-06-30 09:10) [39]


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


 
StarCon   (2004-06-30 09:16) [40]

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


 
StarCon   (2004-06-30 09:18) [41]

мне вот указали на JRokit - быстрейшую жаба-машину
на некоторых операциях она бьет дельфи более чем в 20 раз
магия какая-то :)


 
cyborg ©   (2004-06-30 09:29) [42]

Какая это магия?
Вот это убери Edit1.Text:=IntToStr((GetTickCount()-t)); и в яве тоже, тестируй без вывода на экран.


 
cyborg ©   (2004-06-30 09:33) [43]

И к тому же, всё вот это дело v:=v1*v2+v3/v4-v; по идее посчитается компилятором из констант и больше не будет считаться. Сто миллионов пустой цикл какой-то получается.

А насчёт [42] cyborg ©   (30.06.04 09:29) я не то смотрел :)


 
cyborg ©   (2004-06-30 09:34) [44]

Да блин, вообще касой я стал :), всё правильно там.


 
SPeller ©   (2004-06-30 09:35) [45]


D: - Вощем Java рулит. Сечас особенно идет тенденция к переводу  софта на Java.
- Java не работает адекватно, е-мое. Пусть арифметические операции работают примелимо, допустим. Но кроме этого есть еще много других аспектов.
- Java - это не совсем интерпретатор, скорее - "компилятор at run-time".
- голоса из прошлого?... дарагой, Java рулила лет 5 - 7 назад.
D: - Sun хочет сделать Java мэйнстримом для корпоративного ПО.
- Java 3D – это часть программного кода, известного как API, ранее используемая NASA в системе контроля миссии на Марс.
D: - Java рулит. Сейчас есть тенденция к переходу программирования  на Java.

Дима как обычно в своем репертуаре :-))


 
StarCon   (2004-06-30 10:47) [46]

ну хорошо, вот оптимизированный код:
var
 t,y:cardinal;
 i:integer;
 v,v1,v2,v3,v4,v5,v6,a:double;
begin
 v:=2.674374;
 v1:=0.6748345;
 v2:=9.43924347;
 v3:=67.26357244;
 v4:=4.82736832;
 v5:=0.78473924839;
 v6:=2.94739473982;

 t:=GetTickCount();
 a := v1*v2+v3/v4;
 for i:=0 to 100000000 do
 begin
   v:=a-v;
 end;
 y := GetTickCount()-t;
 Edit1.Text:=IntToStr(y);
end;
на моем компьюторе выполняется - 1578
почему такой же код на жабе выполняется - 1438?
настройки компилятора выставил по рекомендациям (кстати совсем никакого эффекта не дали).


 
wicked ©   (2004-06-30 11:06) [47]

ну блин, человек дает... меряет пиписки двум продуктам и силится кому-то что-то доказать... спрошу прямо....
> StarCon [46]
дарагой, тебе заплатили?... :)
нравится ява - пользуй яву...
не нравится - пользуй что-то другое...
по любому никто тут сразу не кинется писать на яве...


 
wicked ©   (2004-06-30 11:07) [48]

в догонку - тест очень синтетический и с реальной жизнью имеет очень мало общего...


 
Real ©   (2004-06-30 11:24) [49]

интерпретируемый язык - медленнее по определению. собака зарыта в тесте (где именно, не берусь сказать). упростите до максимума тест.


 
Dmitriy O. ©   (2004-06-30 11:29) [50]

А мож дело в константах. Java прочитала один раз и больше пропускает их А Delphi читает каждый цикл по новой.
Мож попробывать без констант в каждом цикле изменяя значения переменных.


 
cyborg ©   (2004-06-30 11:29) [51]

Вот на фрипаскале написал, только с целыми числами:


program test;
Uses windows;
var
t,y:cardinal;
i:integer;
v,v1,v2,v3,v4,v5,v6,a:Longint;
begin
v:=45647;
v1:=-1235;
v2:=4657252;
v3:=34722;
v4:=-2372236;
v5:=234111230;
v6:=2342;

t:=GetTickCount();
a := v1*v2+v3-v4;
for i:=0 to 100000000 do
begin
  v:=a-v;
end;
y := GetTickCount()-t;
WriteLN("V:=",V," v:=a-v | Time: ", y);

v:=45647;

t:=GetTickCount();
for i:=0 to 100000000 do
begin
  v:=(v1*v2+v3-v4)-v;
end;
y := GetTickCount()-t;
WriteLN("V:=",V," v:=(v1*v2+v3-v4)-v | Time: ",y);

v:=45647;

t:=GetTickCount();
for i:=0 to 100000000 do
begin
  asm
  MOV EDX,A;
  SUB EDX,V;
  MOV V,EDX;
  end;
end;
y := GetTickCount()-t;
WriteLN("V:=",V," ASM v:=a-v | Time: ",y);

WriteLN("Press ENTER to exit:");
ReadLN;
end.


Результат:


V:=-1454377613 v:=a-v | Time: 851
V:=-1454377613 v:=(v1*v2+v3-v4)-v | Time: 1282
V:=-1454377613 ASM v:=a-v | Time: 711
Press ENTER to exit:


На Duron 800 MHz


 
Danilka ©   (2004-06-30 11:33) [52]

:))
нигде тут собака и не рылась. что значит "интерпретируемый"? по-вашему интерпритатор берет одну команду, например, v:=a-v, парсит ее, исполняет, затем читает следующую команду?
дык, тогда эту яву вообще невозможно было-бы запускать. :))
там все намного сложнее, в данном случае цикл отрабатывает уже откомпиленый и оптимизированный.


 
StarCon   (2004-06-30 11:52) [53]

всем спасибо! вопрос снят


 
azerty   (2004-06-30 20:51) [54]

as part of ... see article "Кто сегодня самый шустрый?" on http://rsdn.ru


 
iZEN ©   (2004-06-30 20:54) [55]

to azerty   (30.06.04 20:51) [54].
Безбожно устарело, там ещё Java2 1.3 сравнивается.



Страницы: 1 2 вся ветка

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.62 MB
Время: 0.034 c
14-1088376116
Suomi
2004-06-28 02:41
2004.07.18
Где rxlib?


6-1085298945
PR
2004-05-23 11:55
2004.07.18
Вопрос по сокетам


4-1086339528
SigalX
2004-06-04 12:58
2004.07.18
Смена активного привода CD


3-1088182867
zokzok
2004-06-25 21:01
2004.07.18
ttable vs tquery


14-1088335482
DeMoN-777
2004-06-27 15:24
2004.07.18
С