LINUX.ORG.RU

UnsafeArrayList vs ArrayList

 


0

2

Смотрите какое чудо можно вытворять с Java Unsafe, увеличив скорость итерации по списку в 4-5 раз:

https://blog.bramp.net/post/2015/08/27/unsafe-part-3-benchmarking-a-java-unsa...

Так что java по перформансу есть куда расти, надеюсь в 10-ке из Unsafe наконец сделают Safe и помесят в официальный публичный API. Вот тогда заживем )

Сырцы https://github.com/bramp/unsafe/tree/master/unsafe-benchmark

★★★★★

Последнее исправление: foror (всего исправлений: 1)

Смотрите какое чудо можно вытворять с Java Unsafe, увеличив скорость итерации по списку в 4-5 раз:

Стоп, я запутался, это во сколько теперь раз Java быстрее С - в 8-10?

anonymous
()
Ответ на: комментарий от anonymous

Стоп, я запутался, это во сколько теперь раз Java быстрее С - в 8-10?

Да причем тут ваш Си. Если внимательно изучить материал, то такой большой выигрыш происходит за счет создания каждого объекта итерации через unsafe, а не через получения ссылки на объект.

Т.е. UnsafeArrayList хранит объекты не в java-ом хипе, а отдельно выделяет память без надзора GC. Тем самым еще и кушает в два раза меньше, чем ArrayList.

foror ★★★★★
() автор топика

А в 10 же еще должны впилить value types и допиленные generics? Или они на неопределенный срок откладывают, не в курсе? Ибо, если они это все осилят, то там можно нормальный прирост по перформансу получить в итоге.

//Правда, это жесть как нескоро все будет -_-

lazy_aleks
()

Эм... Я так понял, объекты (со ссылками на другие объекты) туда поместить нельзя? Только примитивы и агрегаты примитивов? Так для этого вроде и так давно есть всякие штуки вроде этой: http://trove.starlight-systems.com

ilammy ★★★
()
Ответ на: комментарий от ilammy

Я так понял, объекты (со ссылками на другие объекты) туда поместить нельзя?

Смысла нет, в бенчмарке показано, что с ростом данных на один объект перформанс падает из-за копирования. На 16 байт данных получишь 5-ти кратный рост, а уже на 64 байта данных - 3-х кратный.

Пригодится для каких-нибудь игр, типа создания world'а и итерации по нему. В остальных случаях можно даже потерять профит по сравнению с ArrayList.

foror ★★★★★
() автор топика
Ответ на: комментарий от lazy_aleks

Или они на неопределенный срок откладывают, не в курсе?

В 10-ке определенно должны запилить, но это еще два года ждать (

foror ★★★★★
() автор топика
Ответ на: комментарий от foror

Три года. В 16 - релиз 9 и только в 18 - 10. Так что да, за это время уже и golang до ума доведут или еще чего более производительное.

lazy_aleks
()
Ответ на: комментарий от lazy_aleks

Три года. В 16 - релиз 9 и только в 18 - 10.

Это да, не успеешь глазом моргнуть, а уже 18 год ) Время летит быстро (

и golang до ума доведут

Неужели генерики сделают?

или еще чего более производительное.

Это либо c# зарелезят на webassembly, либо из rust сделают, что-то вменяемое, но я сомневаюсь. Так что, вся надежда только на c# под webassembly, но это тоже долгострой...

P.S. Что-то оптимистично, про перформанс этого UnsafeArrayList высказался, надо его с обычным long[] сравнить. На недельке добавлю в тесты и заценю.

foror ★★★★★
() автор топика

Офигеть. Java научилось то, что C++ умел с самого начала. Представляю сколько будет радости от роста производительности когда JVM научится селить объекты на стеке. Если доживем...

asaw ★★★★★
()
Ответ на: комментарий от foror

Это да, не успеешь глазом моргнуть, а уже 18 год

Ну это для нас оно быстро летит, а тырпрайз и ко еще лет через 5-7 начнут только переходить.

Неужели генерики сделают?

Да они вон как-то и без них обходятся нормально.

Это либо c# зарелезят на webassembly

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

lazy_aleks
()
Ответ на: комментарий от foror

в бенчмарке показано, что с ростом данных на один объект перформанс падает из-за копирования

Так ведь сказали «со ссылками на другие объекты». Откуда там копирование то взялось?

anonymous
()
Ответ на: комментарий от anonymous

Откуда там копирование то взялось?

Как откуда, данные создаются в java хипе и копируются в unsafe хип. Затем при чтении, данные берутся из unsafe хипа и копируются в java хип. Отсюда и копирование.

А если туда сложные объекты пихать, то перформанс просядет на этом копировании.

foror ★★★★★
() автор топика

У меня, кстати, не удалось этот UnsafeArrayList запустить, крешится JVM 1.8

foror ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.