Форум: "Потрепаться";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.6 MB
Время: 0.039 c