Главная страница
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]

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



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

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

Наверх




Память: 0.57 MB
Время: 0.025 c
1-1089003161
ai
2004-07-05 08:52
2004.07.18
Quick Report: как изменять разрешение при печати?


1-1089144177
whitespider
2004-07-07 00:02
2004.07.18
Как связаться с Маткадом


9-1080232856
Zak3D[@Tm]
2004-03-25 19:40
2004.07.18
Изометрическая игра.


14-1087972396
DimKa
2004-06-23 10:33
2004.07.18
Кто какие ВУЗы закончил?


1-1088607689
mmb
2004-06-30 19:01
2004.07.18
Как заставить PaintBox при скроллинге очищаться полностью