xml performance jaxb jaxp

xml - Haz que JAXB vaya más rápido



performance jaxp (2)

1 - ¿Cómo hago que JAXB vaya más rápido?

Está en el camino correcto con la desasignación de una entrada StAX, pero recomendaría un XMLStreamReader en lugar de un XMLEventReader.

XMLInputFactory xmlif = XMLInputFactory.newInstance(); XMLStreamReader xmler = xmlif.createXMLStreamReader(fr);

Como StAX es un estándar, puede cambiar en otra implementación como WoodStox como el analizador subyacente.

2 - ¿Cómo puedo estar 100% seguro de qué mecanismo de análisis subyacente está usando?

Justo como lo estás haciendo. Si pasa una implementación de JAXB a una instancia de XMLStreamReader entonces puede estar razonablemente seguro de que se está utilizando. Si, por otro lado, se desreglamenta de algo así como un InputStream entonces la implementación de JAXB es libre de usar cualquier técnica de análisis que desee. Si usa Woodstox, asegúrese de consultar la página de rendimiento también:

Tengo un archivo de 8 Meg. La clasificación mediante JAXB lleva 1082 ms, usando DOM lleva 862 ms, y SAX tarda 438 ms. Esto usa todos los valores predeterminados con JDK 1.6, no se usa ninguna configuración adicional, como usar woodstox.

En un esfuerzo, para obtener un mejor rendimiento de JAXB, intento hacer que use el análisis SAX al hacer ...

FileReader fr = new FileReader("myfile.xml"); JAXBContext jc = JAXBContext.newInstance(MyObjectList.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); XMLInputFactory xmlif = XMLInputFactory.newInstance(); XMLEventReader xmler = xmlif.createXMLEventReader(fr); long beginTime = System.currentTimeMillis(); MyObjectList obj = (MyObjectList)unmarshaller.unmarshal(xmler); long endTime = System.currentTimeMillis();

Esto lo hace ir aún más lento - 3207ms.

Mis preguntas son: 1. ¿Cómo hago que JAXB vaya más rápido? 2. ¿Cómo puedo estar 100% seguro de qué mecanismo de análisis subyacente está usando?