para memoria manejo library liberar herramienta eliminar elimina delete cache borrar java xml multithreading caching jaxp

memoria - Java y XML(JAXP): ¿qué pasa con el almacenamiento en caché y la seguridad de hilos?



manejo de cache en java (1)

  1. Me gustaría saber qué objetos se pueden reutilizar (en el mismo documento o en uno diferente) cuando se utiliza la API de Java para el procesamiento XML , JAXP:

    • DocumentBuilderFactory
    • DocumentBuilder
    • XPath
    • Node
    • ErrorHandler (EDIT: olvidé que esto tiene que implementarse en mi propio código, lo siento)
  2. ¿Se recomienda almacenar en caché esos objetos o las implementaciones de JAXP ya los almacenan?

  3. ¿El (re) uso de esos objetos es seguro para subprocesos ?


Reutilizar

En el mismo hilo, esos objetos pueden y deben reutilizarse. Por ejemplo, puede usar DocumentBuilder para analizar múltiples documentos.

Seguridad de subprocesos

DocumentBuilderFactory solía explicitar que no era seguro para subprocesos, creo que esto sigue siendo cierto:

No se garantiza que una implementación de la clase DocumentBuilderFactory sea segura para subprocesos. Depende de la aplicación del usuario asegurarse de utilizar DocumentBuilderFactory a partir de más de un hilo.

Desde , DocumentBuilder tampoco parece ser seguro para subprocesos. Sin embargo, en Java SE 5 se agregó un método de reinicio para permitirle reutilizar DocumentBuilders:

XPath no es seguro para subprocesos, del Javadoc

Un objeto XPath no es seguro para subprocesos ni reentrante. En otras palabras, es responsabilidad de la aplicación asegurarse de que un objeto XPath no se use desde más de un hilo en un momento determinado, y mientras se invoca el método de evaluación, las aplicaciones no pueden invocar recursivamente el método de evaluación.

El nodo no es seguro para subprocesos, del sitio web de Xerces

¿La implementación de Xerces DOM es segura para subprocesos? No. DOM no requiere que las implementaciones sean seguras para hilos. Si necesita acceder al DOM desde múltiples hilos, debe agregar los bloqueos apropiados al código de su aplicación.

ErrorHandler es una interfaz, por lo que depende de la implementación de esa interfaz para garantizar la seguridad de la hebra. Para los indicadores de seguridad de hilo, puede comenzar aquí: