Я пишу неизменное дерево DOM на Java, чтобы упростить доступ из нескольких потоков. *
Тем не менее, он должен поддерживать вставки и обновления как можно быстрее. И поскольку он неизменен, если я внесу изменение в узел на N-м уровне дерева, мне нужно выделить как минимум N новых узлов, чтобы вернуть новое дерево.
Мой вопрос заключается в том, будет ли значительно быстрее предварительно выделять узлы, а не создавать новые при каждом изменении дерева? Это было бы довольно легко сделать - сохранить пул из нескольких сотен неиспользуемых узлов и вытащить один из пулов, а не создавать его всякий раз, когда это требовалось для операции модификации. Я могу пополнять пул узлов, когда больше ничего не происходит. (в случае, если это не очевидно, время выполнения в этом приложении будет намного больше, чем в куче)
Стоит ли это делать? Любые другие советы по ускорению?
Кроме того, кто-нибудь знает, есть ли уже неизменяемая библиотека DOM? Я искал, но ничего не смог найти.
* Примечание. Для тех из вас, кто не знаком с понятием неизменяемости, это в основном означает, что при любой операции над объектом, который ее изменяет, метод возвращает копию объекта с изменениями на месте. чем измененный объект. Таким образом, если другой поток все еще читает объект, он продолжит счастливо работать со «старой» версией, не подозревая, что были внесены изменения, вместо того, чтобы ужасно падать. Смотри http://www.javapractices.com/topic/TopicAction.do?Id=29