Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中DOM节点的正确生命周期是什么?_Java_Xml_Dom_Memory Management_Lifecycle - Fatal编程技术网

Java中DOM节点的正确生命周期是什么?

Java中DOM节点的正确生命周期是什么?,java,xml,dom,memory-management,lifecycle,Java,Xml,Dom,Memory Management,Lifecycle,我想知道以下代码在生命周期管理和由此产生的内存管理方面的正确性: org.w3c.dom.Document document = // some document // Some long-running loop for (;;) { // This element has "document" as its owner. But it is never added as a child // element into the document. It can be GC'ed a

我想知道以下代码在生命周期管理和由此产生的内存管理方面的正确性:

org.w3c.dom.Document document = // some document

// Some long-running loop
for (;;) {

  // This element has "document" as its owner. But it is never added as a child
  // element into the document. It can be GC'ed at the end of the loop
  Element abc = document.createElement("abc");
}
此类临时元素(或
DocumentFragment
等)可能经常用于广泛的DOM操作中。在Xerces(Java的标准DOM实现)中,元素持有对文档的引用,但文档不知道元素。这允许垃圾收集器在清除这些元素的作用域时(即在循环结束时)清理这些元素。但API中没有明确记录这一点。另一方面,我在domapi中没有看到任何允许“取消设置”abc的所有者文档的操作


我的问题是:我假设DOM文档可能永远不会保留对它使用
createXXX()
创建的节点的引用,而不管实现如何,这是对的吗?或者,是否存在任何上述操作可能导致内存泄漏的实现?

也许您可以查看几个DOM实现的源代码库,了解它们的行为,并从中得出一些结论? 问题是您无法控制应用程序运行时使用的特定DOM实现,还是应用程序用户可以更改该实现,并且他们经常会更改它


但是,如果document.createXXX方法的javadoc中没有定义特定的契约,恐怕就无法确定确切的行为。所以我看到的唯一一个绝对确定行为是什么的选项是控制DOM的实现并了解其行为

我是的开发人员,所以您认为我无法控制特定的DOM实现是正确的。当然,我可以查看其他实现,但我想知道是否有任何(隐藏的)API契约我遗漏了,并且我应该知道。jOOX创建了很多临时的
DocumentFragment
对象,我一直认为这些对象是由GC清理的……我明白了。。。难道没有一个DOM规范可以至少为您提供关于特定实现应该如何运行的任何提示吗?但除此之外,我想你最安全的办法是用几种流行的实现来测试这一点,并记录你对文档工厂方法行为的假设。让我们看看是否有人能给我指出这样一个DOM规范(比Javadocs更详细),或者一个“失败”但“流行”的实现。。。那将是公认的答案我自己也会很有兴趣看到。。。我在这里做了简要的介绍,这里定义了Java绑定,但不幸的是,没有涉及到这个主题。