【问题标题】:Why does Saxon Professional Edition uses finalize method in their factory implementations?为什么 Saxon Professional Edition 在其工厂实现中使用 finalize 方法?
【发布时间】:2014-08-06 01:00:27
【问题描述】:

Saxon 专业版在他们的工厂实现中使用 finalize 方法,它填充了终结器。关于为什么在接口级别使用终结器而不是 close() 方法的任何想法?

【问题讨论】:

    标签: dom saxon xerces


    【解决方案1】:

    Saxon 只有一个地方包含 finalize() 方法,即在所有版本中都使用的 Configuration 对象上。配置支持所有各种 API,例如 TransformerFactory、XPathFactory、SchemaFactory、XQJ 数据源或 s9api 处理器中的配置。

    finalize 方法采取的行动是关闭用于“标准错误输出”的流,如果这不是 System.err。在某些情况下,用户不可能自己关闭它,例如,如果他们指定一个文件来包含此数据作为配置属性。 JAXP API 不提供任何可用于触发关闭流的 close() 方法,因此我们可以做到这一点的唯一方法是垃圾收集。 (我们可以在工厂实现中提供 close() 方法,但我认为很多用户不会注意到它的存在。

    如果能提供有关由此引起的问题的更多详细信息,我将不胜感激。你说它“填充终结器”。这听起来好像您正在创建和释放很多配置对象。也许您正在创建很多 TransformerFactory 对象?这将是非常糟糕的做法,因为创建 TransformerFactory 的成本很高。通常,应用程序应该创建一个工厂/配置并永远使用它;在单个应用程序中需要多个配置是非常罕见的。

    (顺便说一句,您在这里提出的问题确实需要针对 Saxon 开发人员,而不是针对用户社区。因此,通过位于 saxonica 的 Saxonica 支持站点提出问题更为合适。 plan.io。我们试图密切关注这里提出的问题,但这纯粹是我们需要多长时间才能注意到它们的机会,而且我们不会给予他们与正式支持请求相同的优先级。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多