通过将自己的应用程序类添加到classes.jsa来加速应用程序启动

为了加快JVM的启动时间,Sun开发人员认为在JVM的安装过程中预编译平台的标准运行时类是一个好主意。这些预编译的类可以在以下位置找到:

$ JAVA_HOME \ jre \ bin \ client \ classes.jsa

我公司目前正在开发一个带有独立JRE的Java独立应用程序,因此,通过向此jsa文件中添加我们自己的应用程序类来加快我们的应用程序启动时间也是一个不错的选择。

我不相信JSA文件是由魔术创建的,因此:它是如何创建的?以及如何欺骗JVM合并我自己的类?

:我已经发现以下内容:

classes.jsa由命令创建

java -Xshare:dump

可以在中找到要合并到转储中的类的列表$JAVA_HOME/jre/lib/classlist

我什至设法在这里添加自己的类(并将它们添加到rt.jar中供Java查找它们),并在类列表文件下生成自己的校验和。

最终的问题是:似乎只能识别java,com.sun和org.w3c包中的类,如果我将相同的类保留在其原始包中,则不会加载它们。我在整个OpenJDK源代码中搜索了有关此内容的指针,但它似乎与保护域有关。如果有人对该主题足够感兴趣并且知识渊博,请给我添加一些建议以进一步调查。

回答:

从Java 8u40(和嵌入式Java

8u51)开始,Java现在支持应用程序类数据共享(AppCDS)(即,共享归档文件中您自己的类)。在嵌入式Java上,我们发现启动性能提高了40%以上!很棒,几乎没有我们做的工作…

https://blogs.oracle.com/thejavatutorials/entry/jdk_8u40_released

以上是 通过将自己的应用程序类添加到classes.jsa来加速应用程序启动 的全部内容, 来源链接: utcz.com/qa/406712.html

回到顶部