我在Java中编写一个不可变的DOM树,以简化从多个线程的访问.*
但是,它确实需要尽快支持插入和更新.并且由于它是不可变的,如果我对树的第N级节点进行更改,我需要分配至少N个新节点以返回新树.
我的问题是,每次修改树时预先分配节点而不是创建新节点会快得多吗?这将是很容易做的事情 - 保持几百个未使用的节点池,并拉一出池,而不是创建一个每当被要求修改操作.当没有其他事情发生时,我可以补充节点池.(如果不明显,在这个应用程序中执行时间比堆空间要高得多)
这样做是否值得?关于加速它的任何其他提示?
或者,有人知道一个不可变的DOM库吗?我搜索过,但找不到任何东西.
*注意:对于那些不熟悉不变性概念的人来说,它基本上意味着在对更改它的对象的任何操作中,该方法返回对象的副本,其中包含更改,而不是更改宾语.因此,如果另一个线程仍在读取对象,它将继续愉快地操作"旧"版本,不知道已经进行了更改,而不是崩溃可怕.请参阅http://www.javapractices.com/topic/TopicAction.do?Id=29
目前,对象创建速度非常快,对象池的概念已经过时(至少在一般情况下;连接池当然仍然有效).
避免过早优化.在复制时需要时创建节点,然后查看它是否变得非常慢.如果是这样,那么请研究一些加速它的技术.但是,除非你已经知道你所拥有的东西还不够快,否则我不会介绍你需要的所有复杂性来进行汇集.