JEP 107: Bulk Data Operations for Collections
Массовые операции над данными для коллекций
| Ответственный | Mike Duigou |
| Тип | Feature |
| Область | SE |
| Статус | Closed / Delivered |
| Выпуск | 8 |
| Компонент | core-libs |
| JSR | 335 |
| Обсуждение | lambda dash dev at openjdk dot java dot net |
| Трудоёмкость | L |
| Длительность | XL |
| Зависит от | JEP 109: Enhance Core Libraries with Lambda |
| JEP 126: Lambda Expressions & Virtual Extension Methods | |
| Одобрен | Brian Goetz |
| Создан | 2011/09/23 20:00 |
| Обновлён | 2024/04/22 16:06 |
| Задача | 8046097 |
Аннотация
Добавить в Java Collections Framework возможность выполнять массовые операции над данными. Обычно это называют «filter/map/reduce для Java». Массовые операции над данными будут в двух вариантах: последовательном (в вызывающем потоке) и параллельном (во многих потоках). Операции над данными, как правило, записываются в виде лямбда-функций.
Цели
Предоставить новые возможности массовой обработки данных с помощью лямбда-функций, в том числе параллельные операции
Что не является целью
Перевести существующие случаи использования на параллельные операции.
Мотивация
Ближе всего к этому FlumeJava, которую Google использует внутри компании, и PLinq от Microsoft. Linq и Plinq особенно высоко ценят разработчики .NET, и им сильно завидуют разработчики на Java.
Больше всего выиграют разработчики, которые сейчас создают однопоточные приложения для бизнес-процессов. Ожидается, что возможность использовать конкурентность при минимальных изменениях в приложении принесёт им огромную пользу.
Описание
Последовательная реализация служит переходом от существующих массовых операций над данными в коллекциях к параллельным операциям и не меняет модель потоков приложения.
Главный элемент этой возможности — параллельная реализация. Параллельные операции позволяют ускорить обработку больших объёмов данных, разделив задачу между несколькими потоками (процессорами). Параллельная реализация построена на реализации Fork/Join из java.util.concurrency, появившейся в Java 7.
И у последовательной, и у параллельной реализации возможны «энергичный» (eager) и «ленивый» (lazy) режимы. В энергичном режиме операции выполняются над данными непосредственно в момент вызова функции операции. В ленивом режиме операции над данными откладываются до тех пор, пока не будет запрошен итоговый результат. Ленивый режим даёт реализации больше возможностей для оптимизации за счёт перестройки данных и выполняемых операций.
Тестирование
Для того чтобы итоговый продукт получился качественным, решающее значение будут иметь бенчмарки и регрессионное тестирование производительности.
Для полного тестирования этой работы потребуются значительные аппаратные ресурсы, т. е. выделенные системы с 8 и более ядрами для всех основных поддерживаемых платформ.
Зависимости
- Изменения языка в рамках Lambda
- Изменения базовых библиотек, описанные в JEP 109
- Участие экспертных групп JSR 335 EG и JSR 166 EG и в особенности Дага Ли (Doug Lea)
Влияние
- Совместимость: только прямая совместимость
- Безопасность: стандартно
- Производительность и масштабируемость: требуются значительный объём тестирования и бенчмарки
- Пользовательский опыт: нет
- I18n/L10n: нет
- Переносимость: реализация на 100 % на java. Нативный код не планируется.
- Упаковка и установка: поставляется в составе установки JRE
- Документация: стандартно
- TCK: особых требований нет. Потребуются новые тесты TCK.
- Интернационализация: как у JCF
- Локализация: нет