例如,使用一个独立的可执行jar文件,在其中我们从应用程序生成具有所有依赖关系的文件。我的理解是,该文件包含所有压缩的类等。
[当我们通过命令行按如下java -jar myjar.jar
执行此jar文件时,是否正在动态解压缩该文件?解释器是在执行之前先对所有内容进行解压缩吗?或者它究竟如何工作?
我们在这里已经对类似问题有一个答案:How does a jar file get executed? Do the classes get extracted somewhere?
JVM能够从jar文件加载类或文件,而无需将jar提取为临时文件。此功能在标准库中也可供您使用,有关更多信息,请参见JarFile。
因此,JVM不会将jar提取到临时文件,类(和资源)只是按需加载。
我们还可以通过执行命令“ java -jar myjar.jar”来检查是否提取了jar,并在执行程序时检查jar所在的文件夹是否有任何提取。