我不认为JSA文件是通过魔法创建的,那么:它是如何创建的?如何欺骗JVM将我的类合并进去?
编辑:我已经找到了以下信息:
classes.jsa文件是通过以下命令创建的:
java -Xshare:dump
可以在$JAVA_HOME/jre/lib/classlist
中找到需要包含在转储中的类的列表。
我甚至成功地将自己的类添加到这里(并将它们添加到rt.jar中以便Java能够找到它们),并在classlist文件下面生成了自己的校验和。
最终的问题是:只有java、com.sun和org.w3c包中的类似乎被识别,如果我将相同的类留在它们原来的包中,它们就不会被加载。我在整个OpenJDK源代码中搜索了与此相关的指针,但似乎与保护域有关。如果有人对这个话题感兴趣并且足够了解,请为我添加一些指针以供进一步调查。