java - jar 文件是如何执行的?这些类是否在某处提取?

标签 java jvm executable-jar

我们知道 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/

相关文章:

java - 原语数组存储在 JVM 内存中的位置

Java 32 位与 64 位兼容性

java - 如何在 JButton 上运行线程?

java - java中一个方法是public/private/other是什么意思?

java - java中的方法参数

java - 使用-XX :+PrintHeapAtGC?的GC日志中堆内存地址的含义

java - ./run_timer.sh : no such file or directory

Java 启动画面无法在 Mac OSX 上运行,但可以在 PC 上运行

java - 从 .Net 调用 Java 方法

java - 德国电话号码格式的正则表达式