Я написал класс Record, который отображает ключи на значения и работает путем делегирования полностью синхронизированной EnumMap. Идея состоит в том, что запись может получить новые поля во время выполнения, тогда как Бин не может. Мой вывод заключается в том, что с такой гибкостью приходит снижение производительности. Вот прогон, сравнивающий класс Record с полностью синхронизированным Бином. За 10 миллионов операций:
Record set(Thing, a) 458 ms
Bean setThing(a) 278 ms
Record get(Thing) 398 ms
Bean getThing 248 ms
Итак, есть что-то, что можно получить, зная ваши объекты данных и создав класс, который моделирует их статически. Если вы хотите, чтобы новые поля добавлялись к вашим данным во время выполнения, это будет стоить вам.