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

Поиск:

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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



в JDK нету класс комплексных чисел. 


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


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

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



В commons-math есть реализация, можно взять её.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
v2v
Дата 10.2.2009, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



не, так либу целую надо тащить ... прое самому класс написать ... в любом случае эксперимент будет не совсем чистый.



--------------------
PM   Вверх
Kallikanzarid
Дата 10.2.2009, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Достаточно написать имитацию std::complex из C++ - с двумя членами, аксессорами, функцией abs(x) и методом toString(). Ну или как вам лучше - я вопросами производительности Java раньше не интересовался.

Цитата

в любом случае эксперимент будет не совсем чистый.

ИМХО, основная потеря производительности джавы заключается именно в инженерных решениях при разработке коллекций, большое число метаданных, из-за которых не так эффективен кэш, использовании большого числа уровней абстракции при вводе-выводе и т. д. В бенчмарках вроде "вызови простой метод 10000 раз" или "перемножь две матрицы" это никогда не проявится. Так что такие "нечистые" эксперименты - ИМХО, единственный способ получить представление о том, как соотносится производительность реальных приложений на джаве с производительностью реальных приложений на более низкоуровневых языках.
PM MAIL   Вверх
kamre
Дата 10.2.2009, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(EJack @ 10.2.2009,  12:19)
Неправильно сравнивать платформу (Java) и библиотеку (Qt) непонятно что конкретно мерим. Это как сравнивать теплое с мягким.

Почему же неправильно то? Сравнивал именно скорость отрисовки для простого окна, а также то насколько хорошо поддерживается System Look And Feel (в моем случае это Windows XP LAF). 

Кстати, вот еще сравнивал скорость Java2D и Qt: http://trac-hg.assembla.com/jgears  В принципе Java2D не так уж и сильно тормозит, правда не поддерживает полноценное hardware acceleration.

Цитата(EJack @ 10.2.2009,  12:19)

И еще если Java взяла память это далеко не значит что вся память используется - скорее всего это оптимизация в плане для более быстрого выделения памяти и ухот от ее фрагментивности в памяти. Кроме того необходима память для работы сборщика мусора (за удобства надо платить).

А у меня дома ваш пример вообще не тормозит все летает - и работает все на висте все красиво!

Ну вот при запуске того самого окошка, Java взяла примерно 30Мб памяти, это нормально. А вот то, что при ресайзе окошка она постоянно аллоцирует новые объекты (похоже что картинки для кэширования) и потребление памяти за 100Мб переваливает (при этом еще и сборщик мусора постоянно подчищает эти объекты и все еще больше тормозит) - не нормально. Хотя к скорости и потреблению памяти для Metal LAF у меня претензий нет, все работает достаточно быстро и не жрет память. Но зато есть претензии в виду самого Metal LAF...

Цитата(EJack @ 10.2.2009,  12:19)

Да и посмотрите на IDEA достаточно приятная вещь и работает шустро - да там у них вроде свой L&F

Eclipse побыстрее работает (именно в плане интерфейса вроде прокрутки окна с кодом), хотя на современной машинке это почти и не заметно. А на счет LAF - в IDEA по умолчанию Alloy LAF, и он половину шрифтов не сглаживает в интерфейсе почему-то. 

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


Шустрый
*


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

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



Цитата(kamre @  10.2.2009,  23:47 Найти цитируемый пост)
Почему же неправильно то? Сравнивал именно скорость отрисовки для простого окна, а также то насколько хорошо поддерживается System Look And Feel (в моем случае это Windows XP LAF). 

Кстати, вот еще сравнивал скорость Java2D и Qt: http://trac-hg.assembla.com/jgears  В принципе Java2D не так уж и сильно тормозит, правда не поддерживает полноценное hardware acceleration.


Потому что платформа потребляет всегда больше ресурсов по определению. Есть такая вещь как мета данные - их много, под них нужна память.


Цитата(kamre @  10.2.2009,  23:47 Найти цитируемый пост)
Ну вот при запуске того самого окошка, Java взяла примерно 30Мб памяти, это нормально. А вот то, что при ресайзе окошка она постоянно аллоцирует новые объекты (похоже что картинки для кэширования) и потребление памяти за 100Мб переваливает (при этом еще и сборщик мусора постоянно подчищает эти объекты и все еще больше тормозит) - не нормально. Хотя к скорости и потреблению памяти для Metal LAF у меня претензий нет, все работает достаточно быстро и не жрет память. Но зато есть претензии в виду самого Metal LAF...


Тут конечно стоит вопрос реализации самого L&F, кроме того сборщик работает не постоянно - а только когда решает что пора. Например зачем чистить 50 метров, если в системе еще свободно 2 гига, поэтому память и растет.

Цитата(kamre @  10.2.2009,  23:47 Найти цитируемый пост)
Eclipse побыстрее работает (именно в плане интерфейса вроде прокрутки окна с кодом), хотя на современной машинке это почти и не заметно. А на счет LAF - в IDEA по умолчанию Alloy LAF, и он половину шрифтов не сглаживает в интерфейсе почему-то. 


Вот не очень то я уверен что в эклипсе прокрутка быстрее - спорить не буду. На згляд у всех по разному будет, у меня вообще на поймешь (машинка зверь), но вот отчего я с эклипса перелез на НетБинс а теперь и идею осваиваю (покупать собрался) так это по стабильности работы. Да и 8 версия вообще лапочка smile

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


Leprechaun Software Developer
****


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

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



Цитата(Kallikanzarid @  10.2.2009,  17:47 Найти цитируемый пост)
1) Читаем комплексные числа в двойной список из файла.

Формат записи числа? Как разделяются отдельные числа?


Цитата(Kallikanzarid @  10.2.2009,  17:47 Найти цитируемый пост)
2) Сортируем

Множество комплексных чисел неупорядоченное. Как сортируем?


Цитата(Kallikanzarid @  10.2.2009,  17:47 Найти цитируемый пост)
3) Выводим отсортированный список в другой файл. 

Формат такой же как и во входном файле?


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


Бывалый
*


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

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



Цитата

Формат записи числа? Как разделяются отдельные числа?


Числа записываются как два числа в скобках через запятую или одно число в скобках, если мнимая часть равна нулю:
(1) (0, 1), (0.000001, 3414)

Числа разделены пробелом.

Цитата

Множество комплексных чисел неупорядоченное. Как сортируем?

Сорри  smile Сортируем по модулю по убыванию. Реализацию можно взять стандартную, а можно ручную (так как стандартная написана на С  smile )

Цитата

Формат такой же как и во входном файле? 

Да.

Это сообщение отредактировал(а) Kallikanzarid - 11.2.2009, 13:33
PM MAIL   Вверх
Kallikanzarid
Дата 11.2.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Немного переделал:
Код

#include <iostream>
#include <fstream>
#include <complex>
#include <list>
#include <algorithm>
#include <iterator>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <cstdlib>

using namespace std;
using namespace boost::lambda;

int main() {
    clock_t before;
    
    ifstream in( "in.txt" );
    ofstream out( "out.txt" );
    
    before = clock();
    list< complex< double > > lst;
    copy( istream_iterator< complex< double > >( in ),
          istream_iterator< complex< double > >(),
          back_inserter( lst ) );
    cout << "Reading file -- " << double( clock() - before ) / CLOCKS_PER_SEC << " secs." << endl;
    
    before = clock();
    lst.sort( bind( &norm<double>, _1 ) < bind( &norm<double>, _2 ) );
    cout << "Sorting -- " << double( clock() - before ) / CLOCKS_PER_SEC << " secs." << endl;
    
    before = clock();
    copy( lst.begin(), lst.end(), ostream_iterator< complex< double > >( out, " " ) );
    cout << "Writing file -- " << double( clock() - before ) / CLOCKS_PER_SEC << " secs." << endl;
}



Добавлено через 10 минут и 53 секунды
Протестировал на файле из 10000 чисел (~10 мб):

Код

Reading file -- 3.144 secs.
Sorting -- 0.267 secs.
Writing file -- 2.604 secs.


Машина - Pentium D 2.80, 1024 MB, Windows Vista.
PM MAIL   Вверх
Kallikanzarid
Дата 12.2.2009, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Люди, ау smile
PM MAIL   Вверх
Temdegon
Дата 13.2.2009, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня такой вопрос. Есть к примеру сервер вооруженный 4-мя двухъядерными процами. Если запустить на этом сервере Java-приложение, которое будет что-то длительное время делать, будут ли использоваться все процессоры или система ограничится одним? Приложение на Cи,  решающее эту задачу (Автоматическое составление расписания для студентов) выполняется около 40 минут, но при этом используется только один процессор. Переписать эту программу так, что бы она использовала остальные процесоры никто не может по многим причинам. Вот у меня и возник этот вопрос, есть ли с этим делом какие-то сложности у Java? Насколько она эффективна на многопроцессорных системах? Должен ли сам код быть многопоточным для этого? Есть ли какие-то тонкости в установке и насторойке jre на многопроцессорных серверах? Есть ли особенности в написании кода для таких систем?
PM MAIL   Вверх
v2v
Дата 13.2.2009, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



Переделать приложение в многопоточное. В вашем случае будет достаточным разделить нагрузку между 4мя паралельными потоками, и производительность возростёт ровно в 4 раза.

Добавлено через 2 минуты и 47 секунд
Цитата(Temdegon @  13.2.2009,  00:34 Найти цитируемый пост)
Есть ли какие-то тонкости в установке и насторойке jre на многопроцессорных серверах? Есть ли особенности в написании кода для таких систем? 

нет, реализовать многопоточность будет достаточно, об остальном позаботится ОС.

Добавлено через 4 минуты и 29 секунд

Можете проследить за загрузкой ЦПУ на разных ядрах при выполнении следующего врагмента кода.

Код


public class ThreadTest extends Thread {

    public void run(){
        int k = 0;
        while (true){
            k++;
            if (k > 1000) {
                k /= 2;
            }
        }
    }

    public static void main(String[] args) {
        Thread thread1 = new ThreadTest();
        thread1.start();
        Thread thread2 = new ThreadTest();
        thread2.start();
/*        Thread thread3 = new ThreadTest();
        thread3.start();
        Thread thread4 = new ThreadTest();
        thread4.start();
*/    }

}




--------------------
PM   Вверх
Cr@$h
Дата 13.2.2009, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


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

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



 smile 
Цитата(Temdegon @  13.2.2009,  01:34 Найти цитируемый пост)
Если запустить на этом сервере Java-приложение, которое будет что-то длительное время делать, будут ли использоваться все процессоры или система ограничится одним?

Операционная система ничем не ограничится и ничем не расширится. Сколько потоков есть, столько и будет.
Цитата(Temdegon @  13.2.2009,  01:34 Найти цитируемый пост)
Переписать эту программу так, что бы она использовала остальные процесоры никто не может по многим причинам.

Одной из причин являются невозможностью распараллелить сам алгоритм?
Цитата(Temdegon @  13.2.2009,  01:34 Найти цитируемый пост)
Вот у меня и возник этот вопрос, есть ли с этим делом какие-то сложности у Java? Насколько она эффективна на многопроцессорных системах?

Распараллеливаешь в ручную, используя потоки. Такая программа будет написана только на N-ядерные/процессорные платформы. Каждый раз придётся переписывать для нового числа ядер.
Цитата(Temdegon @  13.2.2009,  01:34 Найти цитируемый пост)
Должен ли сам код быть многопоточным для этого?

Управляемый код уже содержит в себе многопоточность, но лишь служебного характера.
Цитата(v2v @  13.2.2009,  01:52 Найти цитируемый пост)
разделить нагрузку между 4мя паралельными потоками, и производительность возростёт ровно в 4 раза.

Так говорить нельзя. За такое можно сразу банить.  smile 
PM MAIL ICQ   Вверх
v2v
Дата 13.2.2009, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



Цитата(Cr@$h @  13.2.2009,  08:57 Найти цитируемый пост)

Так говорить нельзя. За такое можно сразу банить.  smile  

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



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


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


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

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



Цитата(Cr@$h @  13.2.2009,  09:57 Найти цитируемый пост)
Распараллеливаешь в ручную, используя потоки. Такая программа будет написана только на N-ядерные/процессорные платформы. Каждый раз придётся переписывать для нового числа ядер.

Ммм. Почему? Достаточно сделать число потоков конфигурируемым, насколько я понимаю.


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

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

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


 




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


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

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