Как стать автором
Обновить

Сравниваем производительность reflection в JDK8 и JDK7

Время на прочтение 6 мин
Количество просмотров 23K
Высокая производительность *Разработка веб-сайтов *Java *
Привет, Хабр!

Недавно, путешествуя по коду своего рабочего проекта набрел на довольно высоконагруженный spring бин, который производил обращения к методам объектов (иногда и объектов сгенерированных на лету классов) вызывая геттеры и сеттеры объекта через reflection. В бине уже был реализован кэш геттеров, однако я задался вопросом — насколько быстр reflection и можно ли сделать быстрее.


Читать дальше →
Всего голосов 43: ↑36 и ↓7 +29
Комментарии 13

Измеряем производительность кэша Apache Ignite

Время на прочтение 7 мин
Количество просмотров 6.6K
Высокая производительность *Программирование *Java *Big Data *
После того, как в предыдущих статьях данной серии обзоров распределённого Java-фреймворка Apache Ignite мы сделали первые шаги, познакомились с основными принципами построения топологии и даже сделали стартер для Spring Boot, неизбежно встаёт вопрос о кэшировании, которое является одной из основных функций Ignite. Прежде всего, хотелось бы понять, нужно ли оно, когда библиотек для кэширования на Java и так полным-полно. Тем, что предоставляется реализация стандарта JCache (JSR 107) и возможность распределённого кэширования в наше время удивить сложно. Поэтому прежде чем (или вместо того чтобы) рассматривать функциональные возможности кэша Apache Ignite, мне бы хотелось посмотреть, насколько он быстр.

Для исследования применялся бенчмарк cache2k-benchmark, разработанный с целью доказательства того, что у библиотеки cache2k кэш самый быстрый. Вот заодно и проверим. Настоящая статья не преследует цель всеобъемлющего тестирования производительности, или хотя бы научно достоверного, пусть этим занимаются разработчики Apache Ignite. Мы просто посмотрим на порядок величин, основные особенности и взаимное расположение в рейтинге, в котором будут ещё cache2k и нативный кэш на ConcurrentHashMap.
Читать дальше →
Всего голосов 19: ↑18 и ↓1 +17
Комментарии 4

Зачем мне твои неизменяемые коллекции? Они же медленные

Время на прочтение 5 мин
Количество просмотров 12K
Блог компании ИНФОРИОН Java *Scala *Kotlin *
Бывает так, что когда человек начинает писать на Kotlin, Scala или %language_name%, он делает манипуляции с коллекциями так, как привык, как “удобно”, как “понятнее” или даже “как быстрее”. При этом, разумеется, используются циклы и изменяемые коллекции вместо функций высшего порядка (таких как filter, map, fold и др.) и неизменяемых коллекций.

Эта статья — попытка убедить ортодоксов, что использование “этой вашей функциональщины” не влияет существенно на производительность. В качестве примеров использованы куски кода на Java, Scala и Kotlin, а для измерения скорости был выбран фреймворк для микробенчмаркинга JMH.

image
Читать дальше →
Всего голосов 20: ↑17 и ↓3 +14
Комментарии 31

Как устроен dtraceasm в JMH

Время на прочтение 6 мин
Количество просмотров 5.6K
Java *Системное программирование *

В последней версии Java Microbenchmark Harness (JMH) появился новый профайлер — dtraceasm, долгожданный порт perfasm на Mac OS X, который умеет показывать ассемблерный профиль Java-бенчмарка.


Блиц-опрос показал, что не всем понятно, как в принципе возможно, получив на входе Java-метод, на выходе показать ассемблерный листинг скомпилированного метода с самыми горячими инструкциями, их распределением и небольшим профилем вида "А еще 5% времени виртуальная машина провела в методе Symbol::as_C_string(char*, int)".


В процессе портирования perfasm выяснилось, что на самом деле™ все не очень сложно и появилось желание рассказать, как такой профайлер устроен.


Для понимания статьи крайне желательно ознакомиться с JMH, например, посмотрев на примеры его использования.

Читать дальше →
Всего голосов 32: ↑32 и ↓0 +32
Комментарии 4

Измеряем скорость кода Java правильно (используя JMH)

Время на прочтение 7 мин
Количество просмотров 44K
Высокая производительность *Программирование *Java *Scala *Kotlin *
Туториал
Recovery mode

Привет, Хабр!


Это вводная статья про то, как следует делать тесты производительности на JVM языках (java, kotlin, scala и тд.). Она полезна для случая, когда требуется в цифрах показать изменение производительности от использования определенного алгоритма.


Все примеры приведены на языке kotlin и для системы сборки gradle. Исходный код проекта доступен на github.


КДВП

Читать дальше →
Всего голосов 12: ↑11 и ↓1 +10
Комментарии 8

Benchmarking ORM, используемых при создании Android-приложений

Время на прочтение 5 мин
Количество просмотров 2.4K
Высокая производительность *Разработка под Android *

Привет, Хабр! Меня зовут Артём Добровинский и я Android-разработчик в FINCH.


Однажды, кутаясь в дыму утренней сигары, я изучал исходники одной ORM для Android. Увидев там package под названием benchmarks сразу заглянул туда, и был удивлен тем, что все оценки выполнены с помощью Log.d(System.nanoTime()). Я видел такое не в первый раз. Если быть честнее, я видел даже бенчмарки, сделанные с помощью System.currentTimeMillis(). Обрушившееся осознание того, что что-то надо менять, заставило отставить в сторону бокал с виски и сесть за клавиатуру.

Читать дальше →
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 2

JPoint 2020: новый формат, новые возможности

Время на прочтение 8 мин
Количество просмотров 3.9K
Блог компании JUG Ru Group Java *Конференции
С 29 июня по 3 июля 2020 года в онлайн-формате прошла Java-конференция JPoint 2020. Информация о докладах, спикерах, особенностях проведения, впечатления от конференции — всё это можно прочитать далее.


Читать дальше →
Всего голосов 21: ↑20 и ↓1 +19
Комментарии 11

API, ради которых наконец-то стоит обновиться с Java 8. Часть 3

Время на прочтение 26 мин
Количество просмотров 15K
Java *

Какие есть причины переходить на новые версии Java? Кто-то это сделает из-за новых языковых возможностей вроде выражений switch, блоков текста или записей. Кому-то понадобятся новые интересные возможности вроде модулей или низкопаузных сборщиков мусора. Кто-то это сделает просто из-за того, что обновив версию Java, их программа станет быстрее и будет есть меньше памяти. Но есть ещё одна, не менее важная причина. Это новые API, которые позволят писать меньше кода и избежать траты времени на поиск нужной функциональности во внешних библиотеках. А в некоторых случаях сделают ваш код быстрее.


В предыдущих двух частях мы уже рассмотрели по 10 новых API, которые появились в Java 9 и более поздних версиях (часть 1, часть 2). Сегодня мы рассмотрим ещё 10.


Читать дальше →
Всего голосов 26: ↑24 и ↓2 +22
Комментарии 27

Считаем уникальные IPv4 адреса

Время на прочтение 9 мин
Количество просмотров 7.2K
Высокая производительность *Занимательные задачки Java *Алгоритмы *Processing *
Из песочницы
☕️ Cезон Java

Как создавать быстрые и эффективные алгоритмы? В статье, на примере задачи по подсчёту уникальных IPv4 адресов, рассматриваются приёмы и методы обработки больших объёмов данных. Вы узнаете, как написать код, работающий в десятки раз быстрее и использующий в несколько десятков раз меньше памяти, чем "наивные" алгоритмы.

Читать далее
Всего голосов 18: ↑17 и ↓1 +16
Комментарии 10

Пишем тесты производительности под Webflux

Время на прочтение 8 мин
Количество просмотров 2.1K
Блог компании Usetech Java *
Туториал
☕️ Cезон Java

Добрый день! Меня зовут Александр Леонов, я руководитель группы разработки одной из распределённых команд Usetech. Сегодня я хочу рассказать вам о том, как написать карманный тест производительности на неблокирующий код Webflux. Статья рассчитана на разработчиков, которые разрабатывают API или выполняют оптимизационный рефакторинг медленного кода. Итак, начнём.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 10