Java jar文件是如何执行的?这些课程是在什么地方提取的吗?

Java jar文件是如何执行的?这些课程是在什么地方提取的吗?,java,jvm,executable-jar,Java,Jvm,Executable Jar,我们知道,jar是一种压缩的归档文件格式,它充当已编译java类和conf文件的容器。据我所知,要从压缩容器文件中读取任何内容,首先需要将它们提取到某个地方 那么JVM如何在jar中执行类呢?它是否将jar的内容提取到临时位置,然后执行类?JVM能够从jar文件加载类或文件,而无需将jar提取到临时文件 标准库中也提供此功能,有关详细信息,请参阅 因此,JVM不会将jar提取到临时文件中,类(和资源)只是按需加载 jar文件基本上是一个zip文件,带有预定义的条目“META-INF/MANIFE

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


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

JVM能够从jar文件加载类或文件,而无需将jar提取到临时文件

标准库中也提供此功能,有关详细信息,请参阅

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

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

对于可执行jar,清单文件还包含应加载的主类,以及启动应用程序所需调用的
publicstaticvoidmain(String[])
方法。
Main Class
manifest条目指定了主类:

Main-Class: classname

否jvm将jar文件提取到内存中,而不是文件中。它读取META-INF中的MANIFEST.MF,META-INF中有一个主类的条目。Jvm在此主类中查找公共静态void主类。jvm就是这样找到主类并执行与之相关的可执行jar文件的:打包的数据直接提取到内存中,而不是临时存储在磁盘上。这并不正确。JAR内容被提取出来,但被提取到内存中,而不是文件中。JVM很难直接执行压缩字节码,是吗?