我正在用 Java 编写一个不可变的 DOM 树,以简化来自多个线程的访问。*
但是,它确实需要尽可能快地支持插入和更新。而且由于它是不可变的,如果我对树的第 N 级上的节点进行更改,我需要分配至少 N 个新节点才能返回新树。
我的问题是,每次修改树时预先分配节点而不是创建新节点会更快吗?这将相当容易 - 保留一个包含数百个未使用节点的池,并从池中拉出一个,而不是在需要修改操作时创建一个。当没有其他事情发生时,我可以补充节点池。(如果不是很明显,在这个应用程序中执行时间将比堆空间更宝贵)
这样做值得吗?还有其他加快速度的技巧吗?
或者,有人知道不可变的 DOM 库是否已经存在吗?我搜索了,但找不到任何东西。
*注意:对于那些不熟悉不变性概念的人来说,它基本上意味着在对更改它的对象的任何操作上,该方法返回一个具有更改的对象的副本,而不是更改的对象目的。因此,如果另一个线程仍在读取对象,它将继续愉快地在“旧”版本上运行,而不知道已经进行了更改,而不是可怕地崩溃。见http://www.javapractices.com/topic/TopicAction.do?Id=29