Java程序可以在没有文件的情况下运行吗?

Java程序可以在没有文件的情况下运行吗?,java,Java,我对这方面相当陌生,但本质上是:有程序,也有过程。程序是在执行时生成进程的文件 如果程序仍与某个进程关联,则无法删除该程序。首先需要终止该进程 Java程序似乎也是如此。然而,我很好奇为什么——整个东西不是都加载到JVM中了吗?JVM是一个即时(JIT)编译器。关于JIT编译的信息来源很多,但基本上java程序在运行时会遇到所需的程序部分,这些程序部分位于.class文件中。这些.class文件只是Java代码的中间形式(它不是Java代码,但还不是机器代码)。显然,在运行时编译(JIT)需要资

我对这方面相当陌生,但本质上是:有程序,也有过程。程序是在执行时生成进程的文件

如果程序仍与某个进程关联,则无法删除该程序。首先需要终止该进程


Java程序似乎也是如此。然而,我很好奇为什么——整个东西不是都加载到JVM中了吗?

JVM是一个即时(JIT)编译器。关于JIT编译的信息来源很多,但基本上java程序在运行时会遇到所需的程序部分,这些程序部分位于
.class
文件中。这些
.class
文件只是Java代码的中间形式(它不是Java代码,但还不是机器代码)。显然,在运行时编译(JIT)需要资源(CPU周期)和时间。因此,JVM只加载它需要的程序片段,以最小化浪费的CPU周期

但是,您对流程/程序的理解是正确的。总而言之:进程是程序的运行实例。然后,这个正在运行的程序可以产生更多的进程或线程来执行工作。

“已删除的文件”涉及到som操作系统语义。在Unix/Linux下,文件可能被删除,所有打开的文件句柄保持有效。当最后打开的文件句柄消失时,被删除文件占用的空间将返回到可用空间池


Windows下可能还有其他机制。

JVM不会在同一时刻加载所有内容,它会在需要时加载类。您可以链接到您看到“程序”定义的位置吗?在*nix中,内核生成进程,然后进程生成进程(和线程)。这是操作系统和JVM特有的。我不确定是否有任何机制可以防止在JVM中运行类时删除.class文件。一般来说(可能有奇怪的例外),当类加载器“加载”JVM时,JVM将从.class加载它需要的所有内容,因此在这之后就不需要.class文件本身了。