Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Очередные данные о "медленности" JAVA 
:(
    Опции темы
LSD
Дата 19.3.2005, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



У меня C# быстрее на 5%. Компилятор javac -g:none, флаг -server использовал а с -Xmn, не пробовал играться, надо будет попробовать.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Domestic Cat
Дата 19.3.2005, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



По моим субъективным ощущениям jikes дает более быстрый код, как-нибудь проверю.


--------------------

PM   Вверх
chipset
Дата 3.4.2005, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: нет
Всего: 164



Народ, обьясните как такое может "логически", чтобы интерпретатор работал быстрее ассемблерного кода?


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Дык не ассемблерного, а С++шного, - две большие разницы smile
http://www.javaworld.com/javaworld/jw-02-1...02-jperf_p.html


--------------------

PM   Вверх
chipset
Дата 3.4.2005, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: нет
Всего: 164



Там у них в тестах:
Simple Loop 46K(С++) vs 3.9K(Java)
Они наверное в Debug компилили, я делал ActiveX 2 кб smile

Это сообщение отредактировал(а) chipset - 3.4.2005, 07:29


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



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


--------------------

PM   Вверх
LSD
Дата 7.9.2005, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



После недавней дискусси с Се ля ви, решил поднять некоторые тесты которые мы гоняли на работе и прогнать их еще раз.
Сам код представляет собой итерацию по 2-м массивам, вычисление разности и запись результата в третий массив (нам это было необходимо для обработки видеоизображения). На скорость тестировались:
  • Sun JVM build 1.5.0_01-b08, mixed mode
  • Bea JRockit build dra-45238-20050523-2021-win-ia32
  • Microsoft 32-bit C/C++ Optimizing Compiler Version 13.00.9466 for 80x86
Тесты запускались на следующей машине: P4 3.06Ghz, 512Mb RAM, Windows XP Pro SP2. Java код компилировался соответсвующей JDK (Sun - Sun JDK, BEA - BEA JDK), с ключом -g:none. Ключи запуска такие:
Sun: -Xms50M -Xmx200M -server
BEA: -Xms50M -Xmx200M -jrockit
Были получены следующие результаты:
Код
JVM: BEA Systems, Inc. , dra-45238-20050523-2021-win-ia32
  calculation time = 26368ms (10000 iterations)
  calculation time = 26369ms (10000 iterations)
  calculation time = 26400ms (10000 iterations)

JVM: Sun Microsystems Inc. , 1.5.0_01-b08
  calculation time = 22119ms (10000 iterations)
  calculation time = 22164ms (10000 iterations)
  calculation time = 22960ms (10000 iterations)

Microsoft C++
  calculation time = 22188ms (10000 iterations)
  calculation time = 23563ms (10000 iterations)
  calculation time = 23496ms (10000 iterations)
  calculation time = 23531ms (10000 iterations)

Для Sun JVM один раз было полученно время ~20 сек, но так как оно сильно выделяется на фоне остальных запусков и повторить эксперимент не получилось, в расчет я его не брал. Для C++, тоже замечена странная особенность, первый запуск теста выполняется быстрее последующих на ~1.3 сек, в чем проблема я так и не понял, но результат оставил.


Это сообщение отредактировал(а) LSD - 7.9.2005, 10:05

Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  src.zip 4,38 Kb


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
aquaserpent
Дата 7.9.2005, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



Исходя из примера в MSDN функция clock() возвращает время в миллисекундах:
Код

/* Pauses for a specified number of milliseconds. */
void sleep( clock_t wait )
{
   clock_t goal;
   goal = wait + clock();
   while( goal > clock() )
      ;
}

Тогда совершенно не понятно, зачем это время умножать на 10 в пятом посте в примере?..
Код

printf("\n Program execution time is %u milliseconds \n", (t2 - t1) * 10);


Это сообщение отредактировал(а) aquaserpent - 7.9.2005, 16:52
PM   Вверх
bars_uz
Дата 7.9.2005, 16:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 26.3.2005
Где: Tashkent

Репутация: нет
Всего: нет



Ya neponemayau ,, cheta vizde ideot spor na temu Java vs C++... Bratani ya odnu vesh ponyal, chto oba yzika otlichnie..
oba yzika lutshe pod kakoeta zadach...
no ya dumayu vseotaki Java na odin shag vperedi...
PM MAIL ICQ   Вверх
LSD
Дата 7.9.2005, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



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

Во вторых подобные вопросы не всегда связанны с "религиозными войнами". Например я гонял последний тест, для того чтобы выяснить насколько пригодна Java для применения в нашем проекте.

Ну и наконец, должен же быть у нас заготовлен "наш ответ Чемберлену" smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
aquaserpent
Дата 7.9.2005, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



Не знаю как в остальных тестах, а в первом примере просто неправильно замеряется время в сишном примере. Его нужно просто поделить на 10 (точнее не умножать на 10). И все становится на свои места...

Это сообщение отредактировал(а) aquaserpent - 7.9.2005, 22:52
PM   Вверх
Mayk
  Дата 9.9.2005, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Цитата(aquaserpent @ 7.9.2005, 20:46)
Исходя из примера в MSDN функция clock() возвращает время в миллисекундах:

Цитата(aquaserpent @ 8.9.2005, 02:47)
Не знаю как в остальных тестах, а в первом примере просто неправильно замеряется время в сишном примере. Его нужно просто поделить на 10 (точнее не умножать на 10). И все становится на свои места...

Вы не правы. Котъ писал,
Цитата(Domestic @ 20.6.2004, 04:16)

Я использовал си компилятор
gcc (GCC) 3.3 20030304 (Apple Computer, Inc. build 1495)
Copyright © 2002 Free Software Foundation, Inc.

Поэтому MSDN тут не при чём.
Вообще по Стандарту CLOCKS_PER_SEC = 1000000. А ни 1000, как сделано у мс. Пасикс не указ мелкомягким, а последние не указ пасиксу. Не знаю про cps в апплах, не юзал. Судя по *10, он им тоже не указ. Кстати, мне почему-то кажется, что Доместик 4 секунды от 0.4 отличил бы. Ну я бы, к примеру, отличил.

Проведем еще раз тест.
Результаты для 1000000 итераций(без всяких оптимизаций, чтоб за цикл никто ничего не выкинул)
Java: 1984, 2000, 2000, 1985 ms
Борла: 1500, 1500, 1500, 1531(*10 убрано) ms
VS2003: Дебаг: 11016ms((*10 убрано) 11 СЕКУНД НАФИГ. 11 секунд явно длятся больше секунды. Я уж думал, повисла). Релиз: 0ms(!!!). Фтопку. Фигня какая-то.

Ну и где опережение в десять раз, чтоб всё встало на свои места? Я пока вижу(Visual'но - черное окно в течение 10 секунд) только ухудшение в десять раз в вязанке. В ней делить надо на 10, чтоб она не выбивалась.

Давайте проведем масштабное сравнение компилеров, а? Ну пжалуста. smile smile

зы. В следующий раз, прежде чем кричать "*10 - это не правильно" либо проверьте сами, либо подумайте, совпадает насколько ваш clock() совпадает с clock()'ом проверяющего:

Цитата(http)

Fri, 05 Nov 2004 15:28:44 +0100 =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= <afb xx algonet.se>  writes:
Thomas Kuehne wrote:
> On POSIX systmes like Linux std.c.time.CLOCKS_PER_SEC should be 1000000 and
> not 1000.
And on Darwin BSD (Mac OS X), it should be 100.


Это сообщение отредактировал(а) Mayk - 9.9.2005, 07:58


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Metal_Heart
Дата 9.9.2005, 09:16 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

Репутация: 4
Всего: 12



Mayk, очень прошу, ненадо жаргона, я в твоем посте нить теряю

Чтобы это значило?
Цитата(Mayk @ 9.9.2005, 07:27)
VS2003: Дебаг: 11016ms((*10 убрано) 11 СЕКУНД НАФИГ. 11 секунд явно длятся больше секунды. Я уж думал, повисла). Релиз: 0ms(!!!). Фтопку. Фигня какая-то.





--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
aquaserpent
Дата 9.9.2005, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



Mayk, при чем здесь мелкомягкие? Неужели Вы считаете, что одна и та же СИШНАЯ (а не мелкомягковская) функция будет возвращать разные значения под разными компиляторами? smile Может еще и printf будет другим цветом печатать? smile Нет уж, извините. Есть стандарт языка..
А MSDN, в общем-то, является очень даже авторитетным справочником. И прежде чем "кричать" (как Вы заявляете) я ображаюсь к документации. Теперь подтверждени (модифицированный пример).
Код

#include <stdio.h>
#include <time.h>

unsigned int f;
unsigned int factorial (unsigned int a);

#define N  1000000

main()
{   
   clock_t t1 = clock();
   int i, j, k;
   k = 0;
   for (j = 0; j < 100; j++) {
       for (i = 0; i < N; i++) {
           f = factorial(100);
       }
       k += f;
   }
   clock_t t2 = clock();
   printf("\n Program execution time is %u milliseconds \n", (t2 - t1) * 10);


unsigned int factorial(unsigned int a)
{
   if (a == 1) return 1;
   else 
   {
       a *= factorial(a - 1);
       return a;
   }
}

Код

public class Test
{
   private final static int N = 1000000;
   public static void main(String [] args)
   {
       long t1 = System.currentTimeMillis();
       int f;
    int i, j, k;
    k = 0;
    for (j = 0; j < 100; j++) {
         for (i = 0; i < N; i++)  {
           f = factorial(100);
       k += f;
         }
    }
       System.out.println("\n Program execution time is " + (System.currentTimeMillis() - t1) + 
                                      "   milliseconds");    
   }
   public static int factorial(int a) 
   {
       if (a == 1) return 1;
       else 
       {
           a *= factorial(a - 1);
           return a;
       }
   }
}

Засекаем время секундомером. Java - 128 cек. CPP - 85 сек (плюс/минус секунда погоды не делает). Теперь то, ЧТО ВЫДАЕТ ПРОГРАММА. Java - 128032. CPP - 845150. Ничего не смущает??? Так что MSDN в очередной раз оказался на высоте. А доку читать надо. smile
А мерять время в Debug или умножать реальное время на 10 smile
PM   Вверх
Domestic Cat
Дата 9.9.2005, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата(aquaserpent @ 9.9.2005, 01:13)
Засекаем время секундомером.

На какой оси засекалось?

Цитата(aquaserpent @ 9.9.2005, 01:13)
Так что MSDN в очередной раз оказался на высоте.

Ага, прям так щас. С каких это пор МСДН имеет хоть какое-то отношение к Макинтошу?

Кстати, доки действительно надо читать. На маздае 1000, на дарвине (мак ос х, который я и пользовал) - 100. 1/CLOCS_PER_SEC = количество секунд за один тик. Чтоб перевести в миллисекунды, домножаем числитель и знаменатель на 10. Знаменатель выбрасываем (в Java коде все итак в мс) и получаем то что надо.

Так что читайте мануалы и не верьте в кроссплатформенность си.



--------------------

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0877 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.