我们知道 jar
是一种压缩归档文件格式,它充当已编译的 java 类和 conf 文件的容器。据我所知,要从压缩容器文件中读取任何内容,首先需要将它们提取到某处。
那么JVM是如何执行jar里面的类的呢?它是否将 jar 的内容提取到临时位置,然后执行类?
最佳答案
JVM 能够从 jar 文件加载类或文件,而无需将 jar 解压缩到临时文件。
此功能也可在标准库中使用,请参阅 JarFile
获取更多信息。
所以不,JVM 不会将 jar 提取到临时文件,类(和资源)只是按需加载。
jar 文件基本上是一个带有预定义条目 "META-INF/MANIFEST.MF"
的 zip 文件(这仅在可执行 jar 的情况下是必需的)。此 MANIFEST.MF
条目(文件)包含一些由 JVM 读取的信息。有关 list 文件的更多信息:
Working with Manifest Files: The Basics
如果是可执行 jar,Manifest 文件还包含应加载的主类以及要调用其 public static void main(String[])
方法以启动应用程序。 Main-Class
list 条目指定主类:
Main-Class: classname
关于java - jar 文件是如何执行的?这些类是否在某处提取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26795976/