是什么启动了JVM线程?

zig*_*ggy 3 java jvm jconsole jvisualvm

(如果我错了,请纠正我)

我明白当你通过发出java命令运行java程序时,

java MyProg
Run Code Online (Sandbox Code Playgroud)

该程序将运行到一个新的JVM上.

  • 是什么将程序加载到新的JVM中?它是JRE产生一个新线程吗?

  • 如果每个程序都在自己的JVM中运行,那么它们是否可以相互通信?

  • 我之前问了一个关于如何使用JMX向本地运行的java程序发送请求的问题.我发现如果在本地发出JMX命令,我不需要端口号.答案是客户端应用程序(例如jconsole,jvisualvm,jprobe等)搜索在机器上运行的Java应用程序.这很好,但考虑到客户端应用程序将在与要监视或通信的应用程序不同的JVM中运行,它们如何在没有端口号的情况下相互连接(因为它们不在同一个JVM上运行)?

  • 如果两个程序正在运行,通常会有2个JVM.JVM是否在同一个JRE流程中运行?并且这也不意味着两个JVM应该能够通信吗?

谢谢

Vij*_*hew 6

  • 程序(更具体地说是编译类)由JVM中的一个名为System Class Loader的组件加载.(在这里阅读有关类加载器的更多信息).JVM使用本机代码库(由引导类加载器加载)来生成新线程.
  • 他们可以使用套接字,RPC和其他IPC机制进行通信(通常使用本机库访问).
  • 不知道确切的答案,但必须有一个标准的端口.
  • JVM的不同实例是单独的进程.他们在内存中没有任何共享.(但是,如果在同一系统上运行,它们可能共享相同JRE安装的库和配置文件.这与在同一系统上运行Firefox,Emacs或其他某些应用程序的两个实例没有什么不同.