Eclipse的字符串分区共享优化机制 - 编程入门网
Snap.shareStrings(pool);
}
}
//
// org.eclipse.core.internal.watson.ElementTree
//
public class ElementTree
{
protected DeltaDataTree tree;
public void shareStrings(StringPool set) {
tree.storeStrings(set);
}
}
//
// org.eclipse.core.internal.dtree.DeltaDataTree
//
public class DeltaDataTree extends AbstractDataTree
{
private AbstractDataTreeNode rootNode;
private DeltaDataTree parent;
public void storeStrings(StringPool set) {
//copy field to protect against concurrent changes
AbstractDataTreeNode root = rootNode;
DeltaDataTree dad = parent;
if (root != null)
root.storeStrings(set);
if (dad != null)
dad.storeStrings(set);
}
}
//
// org.eclipse.core.internal.dtree.AbstractDataTreeNode
//
public abstract class AbstractDataTreeNode
{
protected AbstractDataTreeNode children[];
protected String name;
public void storeStrings(StringPool set) {
name = set.add(name);
//copy children pointer in case of concurrent modification
AbstractDataTreeNode[] nodes = children;
if (nodes != null)
for (int i = nodes.length; --i >= 0;)
nodes[i].storeStrings(set);
}
}
Eclipse的字符串分区共享优化机制(4)时间:2011-01-03所有的需优化字符串,都会通过 StringPool.add 方法提交到统一的字符串缓冲池中。而这个缓冲池的左右,与 JVM 级的字符串表略有不同,它只是在进行字符串缓冲分区优化时,起到一个阶段性的整理作用,本身并不作为字符串引用的入口存在。因此在实现上它只是简单的对 HashMap 进行包装,并粗略计算优化能带来的额外空间,以提供优化效果的度量标准。 代码:
不过这里的估算值在某些情况下可能并不准确,例如缓冲池中包括字符串 S1,此时提交一个与之内容相同但物理位置不同的字符串 S2,则如果 S2 被提交多次,会导致错误的高估优化效果。当然如果需要得到精确值,也可以对其进行重构,通过一个 Set 跟踪每个字符串优化的过程,获得精确优化度量,但需要损失一定效率。 在了解了需优化字符串的提交流程,以及字符串提交后的优化流程后,我们接着看看 Eclipse 核心是如何将这两者整合到一起的。 前面提到 Workspace.open 方法会调用 InternalPlatform.addStringPoolParticipant 方法,将一个字符串缓冲池分区的根节点,添加到全局性的优化任务队列中。 代码:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |