Size: a a a

Scala User Group

2021 July 13

GP

Grigory Pomadchin in Scala User Group
можно в репле, это свою нагрузку несет правда но обычно хватает
источник

S

Simon in Scala User Group
Получить байткод из репла как минимум не тривиально.
источник

IT

Igal Tabachnik in Scala User Group
Быстрее можно поставить этот плагин в идею и декомпилить правой кнопкой прямо из кода https://plugins.jetbrains.com/plugin/10302-asm-bytecode-viewer
источник

GP

Grigory Pomadchin in Scala User Group
:javap {-public/-private} <ClassName>
источник

NR

Nikita Ryanov in Scala User Group
Привет!
Подскажите по поводу scodec -- это я не умею его готовить или изначально не стоит ждать от него скорости [де]сериализации?
Суть проблемы: есть протокол общения с тарантулом. Всю работу с байтиками делал через scodec. Сравнил свою реализацию с msgpack-java и что-то все совсем не в мою пользу. Вначале грешил на то, что может как-то неправильно кодеки склеил в один общий кодек, но протестировав сериализацию даже для конкретного типа с использованием конкретного кодека результат также существенно хуже, чем у msgpack-java. Может есть какие-то бест-практисы с ним или надежды нет и проще msgpack-java использовать?
источник

M

Mikhail in Scala User Group
Насколько все плохо?
источник

NR

Nikita Ryanov in Scala User Group
Пробовал тестить сериализацию лонгов:
- scodec ~ 200k ops/sec
- msgpack-java ~ 900k ops/sec

Изначально и не было ожиданий обогнать джавовую реализацию, но были ожидания, что результат будет не настолько хуже ^_^

Если тестировать динамическую сериализацию, то все еще хуже
источник

M

Mikhail in Scala User Group
200к * 8 байт = 1.6 МБ/с ? я нипанимаю, что за скорость такая 200к опс. в байтах то сколько будет пропускная способность?
источник

NR

Nikita Ryanov in Scala User Group
Я jmh тестил (+ цикл еще был, который остался от прежней идеи теста, но суть не меняется):

val long = Random.nextLong()
val encoded = Codecs.
mpInt64Codec.encode(MpInt64(long)).require
val decoded = Codecs.
mpInt64Codec.decodeValue(encoded).require.value

и

val packer = MessagePack.newDefaultBufferPacker()
val long = Random.nextLong()
packer.packValue(new ImmutableLongValueImpl(long))
packer.close()
val unpacker = MessagePack.
newDefaultUnpacker(packer.toByteArray)
val value = unpacker.unpackValue()
val decoded = value.asIntegerValue().asLong()


Вот количество таких операций в секунду и считалось.
В байтах не считал сколько выходит, интересны были показатели в целом как быстро туда-сюда конвертятся значения
источник

M

Mikhail in Scala User Group
ну тип когда байтики то перекладываешь - общее кол-во байтиков и важно. а рпсы на втором плане
источник

NR

Nikita Ryanov in Scala User Group
Одно из другого в принципе вывести можно, зная, что в тесте перекладываем всегда 8 байт x 2
источник

λ

λoλdog in Scala User Group
@nryanov можешь плиз вынести энкодинг в фазу подготовки, получив баит эррей прост и смотреть только декодинг /
источник

NR

Nikita Ryanov in Scala User Group
Да, сейчас попробую так
источник

NR

Nikita Ryanov in Scala User Group
Долго тест не держал, после стандартного вармапа вышло: 421.347 ops/s

Если совсем по-честному без циклов ненужных: link
источник

λ

λoλdog in Scala User Group
а у джавы?
источник

λ

λoλdog in Scala User Group
а вижу
источник

EK

Evgenii Kuznetcov in Scala User Group
Я не спец, но так бенчмарки не пишутся. Ассерты нужно убрать, blackhole добавить. Рандомизация данных тоже нужна.
Я прогнал тест со стандартным long кодеком - получил честные 42M ops/sec
источник

NR

Nikita Ryanov in Scala User Group
Я в целом тоже не спец по бенчмаркам =)
Хм, странно. А точно 42М вышло? У меня scodec больше 5М не выдает, а вот с джавовым кодеком вышло 33М без доп настроек и с максимально топорным бенчмарком (blackhole по умолчанию такой: Blackhole mode: full + dont-inline hint)
источник

λ

λoλdog in Scala User Group
железо разное
источник

λ

λoλdog in Scala User Group
нужно смотреть оба варианта
источник