什么启动JVM线程?

什么启动JVM线程?,jvm,java,jconsole,jvisualvm,Jvm,Java,Jconsole,Jvisualvm,(如果我错了,请纠正我) 我知道当你通过发出java命令来运行java程序时 java MyProg 该程序将在新的JVM上运行 什么将程序加载到新的JVM中?是JRE产生了一个新线程吗 如果每个程序都在自己的JVM中运行,它们是否可以相互通信 我之前问了一个问题,关于如何使用JMX向本地运行的java程序发送请求。我发现如果JMX命令是在本地发出的,我不需要端口号。答案是客户端应用程序(例如jconsole、jvisualvm、jprobe等)搜索机器上运行的java应用程序。这很好,但考

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

我知道当你通过发出java命令来运行java程序时

java MyProg
该程序将在新的JVM上运行

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

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

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

  • 如果有两个程序正在运行,通常会有两个JVM。JVM是否在同一个JRE进程中运行?这难道不意味着两个JVM应该能够通信吗


谢谢

不同JVM中的程序有几种通信方式:

  • ObjectInputStream,ObjectOutputStream

  • RMI

  • 插座

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

      • 幕后没有特殊的魔法
        java
        是一个实现JVM的程序。如果您使用两个不同的程序(例如,在两个不同的shell中)同时运行
        java
        ,您将得到两个进程运行它们自己的JVM。它们可以通过您喜欢的任何IPC或网络协议进行通信。

        …必须有标准端口或任何其他特定于操作的IPC机制(例如Unix上的命名管道或shmem)。