每个应用程序如何创建JVM实例?

3

我知道每个Java进程都在自己的JVM中运行。例如,当我在我的机器上运行jcmd时,我看到:

21730 sun.tools.jcmd.JCmd
77558 /usr/local/opt/jenkins-lts/libexec/jenkins.war --httpListenAddress=127.0.0.1 --httpPort=8080
99974
99983 org.jetbrains.jps.cmdline.Launcher /Applications/IntelliJ IDEA.app/Contents/lib/asm-all-7.0.1.jar:/Applications/IntelliJ IDEA.app/Contents/lib/lz4-java-1.6.0.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/aether-connector-basic-1.1.0.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/plexus-utils-3.0.22.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/aether-api-1.1.0.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/javac2.jar:/Applications/IntelliJ IDEA.app/Contents/lib/util.jar:/Applications/IntelliJ IDEA.app/Contents/lib/platform-api.jar:/Applications/IntelliJ IDEA.app/Contents/lib/qdox-2.0-M10.jar:/Applications/IntelliJ IDEA.app/Contents/lib/jna.jar:/Applications/IntelliJ IDEA.app/Contents/lib/trove4j.jar:/Applications/IntelliJ IDEA.app/Contents/lib/nanoxml-2.2.3.jar:/Applications/IntelliJ IDEA.app/Contents/lib/jdom.jar:/Applications/IntelliJ IDEA.app/Contents/lib/netty-common-4.1.41.Final.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/aet

每个应用程序是如何创建JVM的?例如,在使用java -jar jenkins.war启动jenkins时会发生什么。是否有某个进程从JRE文件夹复制JVM组件并初始化JVM实例?


2
JVM进程的创建方式与操作系统上所有进程的创建方式相同。您是在询问一般的进程创建方式,还是有一些与Java相关的问题? - Joni
好的,我猜JVM是程序,每个Java应用程序都会创建一个JVM进程并在其上运行。 - Ravi
1
JVM从主机操作系统的角度来看实际上是一个应用程序。然后,JVM使用其类加载器来加载您认为是应用程序的类。但是,从多个运行的应用程序同时使用JDK/JRE的角度来看,您的问题很有趣。随着Oracle现在期望我们通过Java平台模块系统将JVM运行时包装到我们的应用程序包中,理想情况下是一个精简的JVM运行时,这个问题有点无关紧要。但是,这个问题仍然很有趣。我会点赞的。 - Basil Bourque
1
请查看以下链接:123 - apangin
1个回答

2
当您启动像java这样的程序时,操作系统会创建一个"进程"。进程是一个正在运行的程序的表示形式。进程的概念使您能够同时运行多个程序的副本。每个进程都有自己的私有内存空间和系统资源,例如打开的文件或网络连接。每个进程可以加载不同的动态链接库。在Java中,许多jvm是使用共享库实现的,启动程序"java"在运行时加载这些库。
细节因操作系统而异,很快就变得复杂起来。
当进程启动时,其中一件事情发生的是可执行文件被映射到内存中。CPU无法执行存储在磁盘或其他外部存储器上的指令,因此程序的"文本"必须首先从磁盘复制到主存储器中。将文件映射到内存中简化了这个过程并使其更加高效:如果CPU需要访问实际上不在RAM中的内存位置,则内存管理单元(MMU)会发出"页错误"。页错误导致数据被加载到RAM中。这比仅将程序文本复制到RAM中更有效(如果不是所有文本都始终需要,则怎么办),并且还简化了整个系统(虚拟内存系统已经需要用于其他操作系统功能)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接