我正在用 Java 编写一个不可变的 DOM 树,以简化多线程的访问。*
然而,它确实需要尽可能快地支持插入和更新。由于它是不可变的,如果我对树的第 N 层上的节点进行更改,我需要分配至少 N 个新节点才能返回新树。
我的问题是,预先分配节点而不是每次修改树时创建新节点会快得多吗?这将是相当容易做到的 - 保留一个包含数百个未使用节点的池,并在修改操作需要时从池中拉出一个而不是创建一个。当没有其他事情发生时,我可以补充节点池。 (如果不明显的话,在这个应用程序中执行时间将比堆空间更宝贵)
这样做值得吗?还有其他加快速度的技巧吗?
或者,有人知道是否已经有了不可变的 DOM 库吗?我搜索过,但没有找到任何东西。
*注意:对于那些不熟悉不变性概念的人来说,它基本上意味着在对对象进行任何更改它的操作时,该方法会返回包含更改的对象的副本,而不是更改后的对象目的。因此,如果另一个线程仍在读取该对象,它将继续愉快地在“旧”版本上运行,而不知道已进行更改,而不是严重崩溃。看http://www.javapractices.com/topic/TopicAction.do?Id=29 http://www.javapractices.com/topic/TopicAction.do?Id=29
如今,对象创建速度非常快,并且对象池的概念已经过时了(至少在一般情况下是这样;连接池当然仍然有效)。
避免过早优化。在进行复制时需要时创建节点,然后看看速度是否会变得非常慢。如果是这样,那么请研究一些加快速度的技术。但除非您已经知道您所拥有的速度不够快,否则我不会介绍池化运行所需的所有复杂性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)