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

Поиск:

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


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



cerf_machine, посмотри пример: http://life.june.com.ua/


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
cerf_machine
Дата 16.2.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



О, забавно.
Меня совсем недавно друг просил это сделать. Он вычитал из какой-то фантастической книги. Я делал на c++, используя WinAPI, но приоритетная роль была отведена именно узору, который проявлялся в жизненном цикле организмов - пикселей серого цвета на черном фоне.
Если интересно, могу показать.

Это сообщение отредактировал(а) cerf_machine - 16.2.2007, 16:58
PM MAIL ICQ   Вверх
VOS
Дата 9.3.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Прикольно все написано, только непонятно откуда такие цифры.

Тест с факториалами пробовал на довольно тормозном в мире C++ компиляторе Borland CBuilder
Код

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

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 unsigned int N = 1000000;
 unsigned int f;

  double d=GetTickCount();
   for (int i = 0; i < N; i++)
   {
       f = factorial(100);
   }
   double d1=(GetTickCount()-d)/1000;
   ShowMessage(d1);

}


У меня получилось 1,079 сек
Если всего лишь объявить вместо unsigned  int factorial(unsigned int a)
unsigned int __fastcall factorial(unsigned int a)
получилось уже 0,857 сек

Тест по созданию большого числа небольших объектов однозначно нечестный для С++. 
Потому что в С++ вы замеряете не только создание, но и удаление объектов (там есть delete a). 
А это минимум в 2 раза увеличивает время. 
PM MAIL   Вверх
devmstr
Дата 9.3.2007, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


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

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



Цитата(VOS @  9.3.2007,  17:01 Найти цитируемый пост)
но и удаление объектов (там есть delete a).

А что Вы считаете что JVM объекты вообще не удаляет? У неё что безграничное пространство для действий без ограничений?


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
VOS
Дата 9.3.2007, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я подозреваю, что объекты будут когда-нибудь удалены. Ключевой момент когда. Но очень сомневаюсь, что это происходит в момент замера теста. Я буду Вам благодарен, если Вы расскажите мне в какой момент происходит реальное удаление объектов в Java и как я могу это контролировать.  Замечу также, что показанный здесь способ создания объектов является самым медленным в С++. Обычно, когда Вам нужны часто создаваемые/уничтожаемые небольшие объекты их создают с помощью конструкции 

А a(i);
a.calculate(...);

В этом случае скорость вырастет на порядки, т.к. чтобы создать/уничтожить объект достаточно передвинуть указатель по стеку и все.
Понимаете, даже если поверить, что JIT компилятор неимоверно крут в Java или там в .Net, есть 
еще некоторые особенности этих языков.
Например массивы. И Java и там C# при каждом обращении к какому-нибудь элементу по любому будут проверять на допустимые границы и т.д. 
Я ни в коем случае не говорю, что это плохо в общем смысле. Но это не добавляет производительности в частности. Но именно из-за общего смысла, для мобил я пишу на Java smile И надо отдать должное, мне все больше нравится с Java работать. 
PM MAIL   Вверх
batigoal
Дата 10.3.2007, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Цитата(VOS @  9.3.2007,  23:58 Найти цитируемый пост)
Я буду Вам благодарен, если Вы расскажите мне в какой момент происходит реальное удаление объектов в Java и как я могу это контролировать.

Благодарности мы не дождёмся - это процесс непредсказуемый smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
maxim1000
Дата 10.3.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Зато можно с увереностью отодвинуть процесс удаления smile
можно изменить тест так:
в C++ только создавать объекты
в Java создавать объекты и использовать их потом (чтобы сборщик мусора не удалил их сразу)
и замерить только время создания в обеих программах...

Добавлено @ 12:05 
а вот время удаления, скорее всего и не получится сравнить из-за этой самой непредсказуемости (хотя яслышал, что можно принудительно вызывать сборщик, но ведь он может начать собирать и другие какие-то вещи)

Это сообщение отредактировал(а) maxim1000 - 10.3.2007, 12:06


--------------------
qqq
PM WWW   Вверх
batigoal
Дата 10.3.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Цитата(maxim1000 @  10.3.2007,  13:03 Найти цитируемый пост)
хотя яслышал, что можно принудительно вызывать сборщик, но ведь он может начать собирать и другие какие-то вещи

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


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
VOS
Дата 10.3.2007, 14:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Еще несколько слов по поводу тестов. Мне кажется сам подход, который пытаются здесь применить - неверен. Вы сначала пишете тест на Java, а потом просто копируете его как код C++.
Не выполнив даже элементарные "косметические" действия как в примере с __fastcall 
Это в корне неверный подход. Хотите получить реальные тесты по производительности, пригласите специалиста в C++. Поставьте ему задачу и пусть он ее сделает любыми доступными ему средствами в C++, а Вы выполните ее любыми доступными средствами в Java. Естественно исходники должны быть открыты и доступны всем участникам. Возможно даже Вы сможете заинтересовать смежный форум по С++ и получится даже некое межфорумное соревнование  smile Ну и конечно, например 5-10 тестов должны быть от форумчан С++ и 5-10 от поклонников Java. 

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

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


Leprechaun Software Developer
****


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

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



Цитата(VOS @  10.3.2007,  14:49 Найти цитируемый пост)
Это в корне неверный подход. Хотите получить реальные тесты по производительности, пригласите специалиста в C++. Поставьте ему задачу и пусть он ее сделает любыми доступными ему средствами в C++, а Вы выполните ее любыми доступными средствами в Java. Естественно исходники должны быть открыты и доступны всем участникам. Возможно даже Вы сможете заинтересовать смежный форум по С++ и получится даже некое межфорумное соревнование   Ну и конечно, например 5-10 тестов должны быть от форумчан С++ и 5-10 от поклонников Java. 

Уже приглашали: Coocky и Chipset-а, до конца так и не довели. Если есть охота займись.
А вообще есть раздел "Наши тесты" там и тема соответсвующая есть.


--------------------
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   Вверх
$tatic
Дата 18.3.2007, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вы уже, наверное, видели мою тему в тестах о бенчмарке OpenGL на Java и C++. Сейчас уже есть один человек, который согласился написать код на C++. Правда он копирует мой весьма неоптимизированный (в плане графики, да и обхода дерева мешей) код на Java. Если кто-то хочет присоединиться - пожалуйста. Правда лично мне кажется, что производительность реальных графических приложений будет примерно одинакова - графика сейчас больше видеокартой обсчитывается, а не процессором.
Да и еще, есть такие игры как ИЛ2-Штурмовик, Chrome, Xtreme Rally (неплохой автосимулятор кстати, даже на небыстром компе летал), Закон и порядок. В них логика (все кроме графики) делалась на яве, а графический движок на C++. И ничего, геймеры не заметили в принципе. ;)
PM MAIL   Вверх
SaDFromSpb
Дата 19.3.2007, 03:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата($tatic @  18.3.2007,  22:36 Найти цитируемый пост)
Да и еще, есть такие игры как ИЛ2-Штурмовик, Chrome, Xtreme Rally (неплохой автосимулятор кстати, даже на небыстром компе летал), Закон и порядок. В них логика (все кроме графики) делалась на яве, а графический движок на C++. И ничего, геймеры не заметили в принципе. ;) 

Вот удивил, так удивил!... Это достоверная инфа?

VOS, +1.  
Действительно, многие сравнения не честны. В серверной джаве наверняка политика менеджера памяти сильно отличается от С++сных реализаций. Там, например, память вполне может выделяться большими блоками, которые по-тихоньку заполняются, к тому же удаляется это все дело фиг знает кода. В си, во-первых у тебя есть выбор, какую память выделять, во-вторых есть замечательная возможность с легкостью создать собственный менеджер памяти (или просто взять альтернативный, например, из библиотеки <locki> ), который будет несоизмеримо эффективнее по сравнению со стандартной операцией new для маленьких объектов. Так же есть возможность явно рекомендовать компилятору хранить определенную переменную в регистре и т.д. и т.п. (хотя это уже тонкий напильник....)  В яве всех этих возможностей нет, скажем так, по определению.
Так что, абсолютно уверен, что при небольшом желании на сях можно обогнать серверную джаву в любой задаче, если руки растут откуда надо.


Это сообщение отредактировал(а) SaDFromSpb - 19.3.2007, 07:51


--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
SaDFromSpb
Дата 19.3.2007, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну может быть, еще компилятор для с++ половчее поискать прийдется для этого  smile 


--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
LSD
Дата 19.3.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(SaDFromSpb @  19.3.2007,  03:53 Найти цитируемый пост)
Так что, абсолютно уверен, что при небольшом желании на сях можно обогнать серверную джаву в любой задаче, если руки растут откуда надо.

А при определенных усилиях на асме можно обогнать любой Си 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   Вверх
Бонифаций
Дата 19.3.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SaDFromSpb @  19.3.2007,  03:53 Найти цитируемый пост)
Действительно, многие сравнения не честны. В серверной джаве наверняка политика менеджера памяти сильно отличается от С++сных реализаций


Я не согласен с таким определением честности. Если ява действует разумнее при распределении памяти, это ее достоинство. Так что если мы пишем один и тот-же алгоритм на C++/java и java обгоняет - то в этом тесте она победила. независимо от того, кто как управляет своими ресурсами.




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

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

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


 




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


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

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