为什么创建JAXB上下文需要这么长时间?

时间:2018-04-30 07:19:23

标签: java xml jaxb

我有一个项目,我创建了几个不同的XML解析器。在每种情况下,我都从XSD开始,使用JAXB生成带注释的类,并使用一些简单的样板来解析XML流,类似于:

JAXBContext context = JAXBContext.newInstance(contextClasses);
Unmarshaller parser = context.createUnmarshaller();
Object object = parser.unmarshal(stream);

contextClasses的类型为Class[],并且包含与根XML标记对应的类,在某些情况下,还包含ObjectFactory类。

到目前为止,效果非常好。我现在正在为他们的XSD添加针对Oracle的Agile XML的新解析器。这不是一个特别复杂的XSD。但是,由此产生的JABX生成的类数超过350,并且在620K LOC处进入。所以有很多生成的代码。当然比我的其他解析器更多。下一个最复杂的XSD会导致130多个课程。

对于此解析器,我只将根标记AgileData传递给行:

JAXBContext context = JAXBContext.newInstance(contextClasses);

在运行时完成此行需要一分多钟。 CPU持续时间达到30-40%。这与我的所有其他解析器相比是不利的,其中这一行在众所周知的分裂中完成。

那么,为什么这条线需要很长时间才能完成? (当我查看代码时,它似乎只是简单地读取和加载类和属性,因此我猜测它是生成代码量的函数。)

更重要的是,我能做些什么来让它跑得更快,即。在与我的其他解析器类似的时间?

0 个答案:

没有答案