Структуры в Java через org.ObjectLayout


Очень советую посмотреть полезный в плане идей доклад Faster Object Arrays от одного из разработчиков  виртуальной джава машины Zulu оптимизированной под параллельные вычисления.
Вкратце смысле следующий: в языках Си, С++ и C# на уровне синтаксиса есть структуры (struct), они копируются по значению и могут хранится на стеке процессора а не в куче оперативной памяти (heap).
Создатели Java, исходя из принципа минимализма архитектуры, решили что не стоит вводить структуры поскольку они по своей сути являются теми же обычными объектами. Вместо этого они оптимизировали JVM таким образом что если она видит что объект может поместится в стеке процессора, то она это делает. Например маленький объект класса Point { int x, int y } с двумя полями координат. И в принципе так красиво обошлись без вводя понятия структуры.
Но осталась одна область где структуры явно дают хороший прирост производительности: это массив структур.

С таким массивом доступ к полям происходит мгновенно поскольку мы заранее можем вычислить адрес поля в оперативной памяти. С массивом объектов нам приходится сначала вычислять адрес элемента хранящего указатель на объект. Т.е. скорость тут немного просаживается.

Для решения этой проблемы в JDK 9 будет введён новый класс StructuredArray для хранения массива объектов физически сгруппированных в памяти который для обратной совместимостью со старыми версиями джавы будет выглядеть как обычный класс, но будет оптимизирован самой JVM 9.

В результате для такого рода задач можно будет достичь скорости сравнимой с нативным кодом.

Очень интересно и гениально как по мне. Попробовать вы можете уже сейчас в рамках проекта org.ObjectLayout

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s