通过将自己的应用程序类添加到 classes.jsa 来加快应用程序启动速度
为了加快 JVM 的启动时间,Sun 开发人员决定在安装 JVM 期间预编译平台的标准运行时类是一个好主意。这些预编译的类可以在例如以下位置找到:
$JAVA_HOME\jre\bin\client\classes.jsa
我的公司目前正在开发一个Java独立应用程序,它带来了自己的JRE,所以通过将我们自己的应用程序类添加到这个jsa文件中来加快我们的应用程序启动时间将是一个绝佳的选择。
我不相信JSA文件是由魔术创建的,所以:它是如何创建的?我该如何欺骗 JVM 来合并我自己的类?
编辑:我已经发现了以下内容:
classes.jsa 由以下命令创建
java -Xshare:dump
要合并到转储中的类的列表可在 中找到。$JAVA_HOME/jre/lib/classlist
我甚至设法在这里添加了我自己的类(并将它们添加到rt.jar以便java找到它们),并在classlist文件下面生成我自己的校验和。
最后一个问题是:似乎只有java,com.sun和org.w3c包中的类才能被识别,如果我在原始包中保留相同的类,它们就不会被加载。我搜索了整个OpenJDK源代码以查找有关此内容的指针,但它似乎与保护域有关。如果有人对这个话题足够感兴趣并且有足够的知识,请添加一些指针供我进一步调查。