我知道每个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实例?
发布于 2020-07-06 12:23:31
当你启动一个像java这样的程序时,操作系统会创建一个“进程”。进程是活动的、正在运行的程序的表示。进程概念允许您同时运行程序的多个副本。每个进程都有自己的私有内存空间和系统资源,比如打开的文件或网络连接。每个进程可以加载一组不同的动态链接库。在Java中,大部分jvm都是在共享库中实现的,启动程序"java“在运行时加载到共享库中。
细节依赖于操作系统,并且很快就会变得复杂。
进程启动时发生的一件事是可执行文件被映射到内存中。CPU不能执行磁盘或其他外部存储器上的指令,因此必须首先将程序"text“从磁盘复制到主存中。将文件映射到内存简化了这一过程,并提高了效率:如果CPU需要访问实际上不在RAM中的内存位置,则内存管理器单元(MMU)会发出“页面错误”。页面错误会导致数据加载到RAM中。这比简单地将程序文本复制到RAM中更有效(如果不是所有的文本都需要一直使用),并且还简化了整个系统(其他操作系统功能已经需要虚拟内存系统)
https://stackoverflow.com/questions/62747553
复制相似问题