【发布时间】:2014-08-06 01:00:27
【问题描述】:
Saxon 专业版在他们的工厂实现中使用 finalize 方法,它填充了终结器。关于为什么在接口级别使用终结器而不是 close() 方法的任何想法?
【问题讨论】:
Saxon 专业版在他们的工厂实现中使用 finalize 方法,它填充了终结器。关于为什么在接口级别使用终结器而不是 close() 方法的任何想法?
【问题讨论】:
Saxon 只有一个地方包含 finalize() 方法,即在所有版本中都使用的 Configuration 对象上。配置支持所有各种 API,例如 TransformerFactory、XPathFactory、SchemaFactory、XQJ 数据源或 s9api 处理器中的配置。
finalize 方法采取的行动是关闭用于“标准错误输出”的流,如果这不是 System.err。在某些情况下,用户不可能自己关闭它,例如,如果他们指定一个文件来包含此数据作为配置属性。 JAXP API 不提供任何可用于触发关闭流的 close() 方法,因此我们可以做到这一点的唯一方法是垃圾收集。 (我们可以在工厂实现中提供 close() 方法,但我认为很多用户不会注意到它的存在。
如果能提供有关由此引起的问题的更多详细信息,我将不胜感激。你说它“填充终结器”。这听起来好像您正在创建和释放很多配置对象。也许您正在创建很多 TransformerFactory 对象?这将是非常糟糕的做法,因为创建 TransformerFactory 的成本很高。通常,应用程序应该创建一个工厂/配置并永远使用它;在单个应用程序中需要多个配置是非常罕见的。
(顺便说一句,您在这里提出的问题确实需要针对 Saxon 开发人员,而不是针对用户社区。因此,通过位于 saxonica 的 Saxonica 支持站点提出问题更为合适。 plan.io。我们试图密切关注这里提出的问题,但这纯粹是我们需要多长时间才能注意到它们的机会,而且我们不会给予他们与正式支持请求相同的优先级。)
【讨论】: