jar 文件是如何执行的?类是否被提取到某个地方?

2022-09-02 21:29:08

我们知道这是一种压缩的归档文件格式,它充当已编译的java类和conf文件的容器。据我所知,要从压缩的容器文件中读取任何内容,首先需要将它们提取到某个地方。jar

那么JVM如何在jar中执行类呢?它是否将 jar 的内容提取到临时位置,然后执行类?


答案 1

JVM 能够从 jar 文件加载类或文件,而无需将 jar 解压缩到临时文件。

标准库中也提供了此功能,有关更多信息,请参阅 JarFile

所以不,JVM不会将jar提取到临时文件,类(和资源)只是按需加载。

jar文件基本上是一个具有预定义条目的zip文件(这仅在可执行jar的情况下是必需的)。此条目(文件)包含 JVM 读取的一些信息。有关清单文件的更多信息:"META-INF/MANIFEST.MF"MANIFEST.MF

使用清单文件:基础知识

如果是可执行 jar,则 Manifest 文件还包含应加载的主类以及要调用其方法来启动应用程序。清单条目指定主类:public static void main(String[])Main-Class

Main-Class: classname

答案 2

否 jvm 将 jar 文件解压缩到内存中,而不是解压缩到文件中。它读取清单。META-INF 中的 MF,其中包含主类的条目。Jvm 在此主类中查找公共静态 void 主类。这就是 jvm 查找主类并执行可执行 jar 文件的方式


推荐