gpt4 book ai didi

java - JAXBContext 初始化加速?

转载 作者:IT老高 更新时间:2023-10-28 21:14:39 26 4
gpt4 key购买 nike

有没有什么方法可以加快 javax.xml.bind.JAXBContexts 的初始化以及大量(>1000)类的初始化?在我们的 XML 繁重的应用程序中,启动时间大约为 10 分钟,主要包括 JAXBContexts 的初始化时间。 :-(

我们在 JDK 1.5 中使用 Sun 的 JAXB 实现,并使用 org.jvnet.jaxb2.maven2.maven-jaxb2-plugin 从 XSD 生成代码。

澄清:问题不在于我们有许多具有相同上下文路径的 JAXBContext 实例,而在于一个 JAXBContext 的初始化需要数十秒,因为它必须加载和处理数千个类。 (我们的 XSD 相当大且复杂。)所有 JAXBContext 实例都有不同的上下文路径 - 我们无法进一步减少数量。

最佳答案

出于这个原因,JAXB 引用实现具有某种未记录的系统属性:

-Dcom.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.fastBoot=true

或者对于包重构之前的旧版本:

-Dcom.sun.xml.bind.v2.runtime.JAXBContextImpl.fastBoot=true

这指示 JAXB 跳过预先缓存完成这项工作所需的各种反射肌肉的昂贵过程。相反,它会在使用上下文时进行所有反射。这会导致运行时间变慢,但初始化速度要快得多,尤其是对于大量类。

然而,速度问题的一部分是不可避免的,那就是 JAXB 必须加载您的每一个类,并且类加载很慢。如果您在第一个上下文之后立即使用相同的配置创建第二个上下文,则这一点很明显 - 您会发现它已经加载了类要快得多。

另外,您说您有多个 JAXBContext 实例,因为您有多个上下文路径。您是否意识到可以将多个上下文路径放入单个上下文中?您只需在初始化上下文时将它们全部作为分号分隔的字符串传递,例如

JaxbContext.newInstance("a.b.c:x.y.z");

将加载上下文 a.b.cx.y.z。不过,它可能不会对性能产生任何影响。

关于java - JAXBContext 初始化加速?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/794354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com