|
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
|
|
Отказ от кастинга22.11.2006, 19:52. Показов 8889. Ответов 38
Метки нет (Все метки)
Меня всегда раздражала необходимость кастинга при извлечении обьекта из библиотечной коллекции. Обычно в коллекции хранят обьекты одного известного типа, но при извлечении приходится всякий раз этот кастинг делать. Модные нынче дженерики не в счет. Там внутри тот же кастинг делается. Придумано исключительно для удобства программирования, но не для повышения эффективности программы.
Кастинг - отнюдь не самая тяжелая операция, но все же операция (по моим примитивным тестам время извлечения обьектов из коллекции возрастает примерно на 5% ). Возникает ли желание взять, скажем, ArrayList и на его основе сделать к примеру StringArrayList, заточенный под хранение стрингов? Чтобы исключить кастинг. Или это паранойя и маразм?
0
|
|
| 22.11.2006, 19:52 | |
|
Ответы с готовыми решениями:
38
Почему при стирании кастинга к даблу, компилятор пишит что getob(); возврашает Object? отказ запуска компрессора, периодически отказ компрессора SAMSUNG RL33 Отказ в доступе |
|
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
|
|
| 30.11.2006, 19:22 [ТС] | |
|
Метафоры какие-то, намеки. Ничего не понимаю.
0
|
|
|
wind
|
|
| 03.12.2006, 23:13 | |
|
Хочу внести свои пять копеек. Во-первых, кастинг действительно отъедает порядка пяти процентов (результат воспроизводится простыми тестами). Во-вторых, сия операция (по результатам моего теста) длится 3 наносекунды.
Теперь вопрос: много ли это? И еще один вопрос: много ли это для Java? Например, операция деления двух long'ов примерно в 3 раза длительнее. |
|
|
1 / 1 / 1
Регистрация: 05.01.2010
Сообщений: 235
|
|
| 04.12.2006, 15:58 | |
|
Собственно непонятно о чем спор. Если место действительно узкое и есть на это дело жалобы от пользователей и оптимизировать больше ну никак нечего, то почему бы и не написать свою коллекцию. Если же просто не дает покоя мысль о потере пяти процентов, то пожалуй не стоит. Хотя при избытке свободного времени можно и в последнем случае попробовать.
0
|
|
|
paradise
|
||
| 04.12.2006, 20:04 | ||
Вот это +1. До наносекунд вычислил. Вот только как? |
||
|
1 / 1 / 1
Регистрация: 05.01.2010
Сообщений: 235
|
|
| 04.12.2006, 20:27 | |
|
просто некоторые люди мыслят быстрее
0
|
|
|
wind
|
||
| 05.12.2006, 03:09 | ||
J2SE 1.5+ А вообще-то не обязательно наличие специального метода. Запустить длиннющий цикл, полученное время поделить на число итераций. Разумеется, это будет "грязный" результат, но для сравнительных тестов - в самый раз. |
||
|
0 / 0 / 1
Регистрация: 29.05.2009
Сообщений: 52
|
|
| 05.12.2006, 20:54 | |
|
Если уж озобачиваться производительностью при работе с List, Set, Map, Integer, Double и прочим, то ИМХО лучше стоит посмотреть в эту сторону - http://javolution.org/
Использование этой либы даст прирост производительности гараздо больший чем простой отказ от кастинга.
0
|
|
|
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
|
|
| 06.12.2006, 00:30 [ТС] | |
|
Я натыкался когда-то на этот сайт. Если вы пробовали javolution , то интересны ваши впечатлениями.
0
|
|
|
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
|
|
| 06.12.2006, 19:53 | |
|
Честно скажу, не пробовал. А вот код посмотрел. И вот че думаю:
1. Я не понял, зачем они в FastMap'е массив с Entry сделали прямоугольным. Есть идеи? 2. Мне не понравилось большое кол-во transient, что может привести (но не обязательно приведет) к борьбе за блокировку на шине памяти. 3. Я видел, что они используют Runnable(). Вопрос, они че, за моей спиной потоками рулят? Если да, то почему в доке я ни слова не встретил про то, какие ньюансы могут вылезти из-за этого? Dead-lock ли free этот код? 4. В чем смысл класса ReentrantLock? Нет, я понял, чего он делает. Я не понял, зачем он написан. Дальше пока не смотрел. Но бенчмарки у них интересные. Очень даже. Ответственно заявляю. Только вот вопрос, они учитывали кол-во CPU, съедаемое GC? Что не понравилсь: почему нету (или я не нашел) хеш-таблицы для long? Для остальных примитивных типов они не нужны, а вот для целых -- очень. Но их нету... И вообще нету коллекций для примитивных типов. Не понравилось. Судя по названию классов, они пытаются управлять памятью. Смело. Настораживает. Пока не смотрел. Вывод: перед использованием я бы сто раз проверил каждую строчку кода. И уж точно не доверял бы их бенчмаркам =))
0
|
|
|
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
|
||
| 06.12.2006, 22:04 [ТС] | ||
0
|
||
|
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
|
|
| 07.12.2006, 16:15 | |
|
Проще. А работает? Я вот каждый раз вспоминаю позырьковую сортировку. Представьте, что 100 тыс элементов она сортирует за 1 мин. Миллион -- за 100 минут (1.67 часа). Долго, да? Давайте увеличим тактовую частоту процессора в два раза. Тогда 100 тыс отсортируется за полминуты, а миллион -- за 50 мин =)) И это при том, что процессор в удвоенной частотой -- миф (видели 6-8 ГГц процы?), а если и не миф -- то состояние.
Я поимаю, что речь шла о втором компьютере. Тока это роли не меняет. К пузырьку второй процессор не прикрутить -- не параллелится алгоритм. Дело в алгоритме. И именно поэтому ребята и написали javolution. И знаете что, они молодцы. Если все то, что они пишут -- правда, и это работает, они молодцы.
0
|
|
|
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
|
|
| 07.12.2006, 19:23 [ТС] | |
|
Конечно, молодцы. Но этот проэкт известен уже несколько лет. И если там все так действительно революционно, он бы получил широкое применение, вплоть до включение в состав jdk. Может, он уже и применяется. Поэтому я и интересуюсь. Например, в клиентском приложения, где железа не добавишь точно, я бы его применил.
0
|
|
|
0 / 0 / 1
Регистрация: 29.05.2009
Сообщений: 52
|
|
| 08.12.2006, 13:52 | |
|
Javolution вещь, безусловно, хорошая, но в реальном приложении чтобы получить большой выигрыш нужно чтобы все было на них организованно. Для WEB-приложений это не реально - нужно JBoss, Tomcat сначала на них перевезти.
Transient и управление памятью и Threads их и спасает. Дело в том, что их классы умеют делать пул объектов в рамках треда. За счет этого увеличивается производительность (меньше операций new ObjecT()) и меньше нагрузки на GC. Также у них собственная реализация Number-классов которые работают быстрее на операциях parse и сверки.
0
|
|
|
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
|
||
| 08.12.2006, 14:22 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
|
||
| 08.12.2006, 19:05 [ТС] | ||
.
0
|
||
|
0 / 0 / 1
Регистрация: 29.05.2009
Сообщений: 52
|
||
| 11.12.2006, 15:46 | ||
Если внимательнее почитать их сайт, то становится понятным их "поведение". Это сделано в угоду RTSJ - Real-Time Specification for Java. А по поводу блокировок. Эти ребятки не так уж и просты чтобы использовать synchronization: Javolution's collection classes (map, list, table and set) are all RTSJ-Compliant and support concurrent access without synchronization! When a thread enters a concurrent context, it may execute multiple concurrent logics by calling any of the ConcurrentContext.execute(logic, arg0, arg1, ...) static methods. The logic is then executed at the same priority as the current thread and in the same memory area by a ConcurrentThread or by the current thread itself if there is no concurrent thread immediately available (as the number of concurrent threads is limited, see Javolution Configuration for details).
0
|
||
|
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
|
|
| 11.12.2006, 17:07 | |
|
С подходами неблокирующих алгоритмов я знаком. Но они (в общем виде) грешат тем, что просто едят CPU. Это с одной стороны. С другой, они говорят: "When a thread enters a concurrent context..." Так используют они блокировки или нет? Если да, то -- thread contention. Если нет, то поедание CPU.
Соображения?
0
|
|
|
0 / 0 / 1
Регистрация: 29.05.2009
Сообщений: 52
|
|
| 12.12.2006, 12:54 | |
|
Думаю самое простое в этом случае посмотреть исходники. Они не большие, да и лицензия позволяет - BSD однако.
0
|
|
| 12.12.2006, 12:54 | |
|
Помогаю со студенческими работами здесь
39
Отказ графики
Отказ материнки? Отказ на снос
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения
Продолжаю серию постов о дискретно-событийной модели рабочего. . .
|
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы
Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
|
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция
Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
|
|
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
|
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
|
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика
Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
|