我能在我的电脑上运行多个JVM吗?

10

我能够运行多个JVM吗?如果可以,那么我该如何找到特定的类加载在哪个JVM上?


1
你为什么想知道虚拟机加载了哪个类?如果我们知道了,或许就能给你一个答案。 - TofuBeer
这听起来像是你试图以另一种方式完成应该完成的任务。你不应该需要知道在JVM上加载了哪个类。 - Peter Lawrey
7个回答

14

虽然你的意思不是很清楚,但如下:

  • 您可以在同一台机器上安装多个虚拟机(版本/品牌等)。
  • 您可以运行多个 java 进程,无论是相同的JVM版本还是不同的版本。

除非您运行调试代理或类似工具,否则我不知道有任何方法可以询问JVM进程是否加载了特定的类。这似乎是一个有些奇怪的要求 - 您为什么想要这样做呢?


6
你可以在磁盘和内存上运行尽可能多的JVM :)
每当你启动一个Java应用程序时,首先启动JVM,然后告诉它要运行哪个应用程序。回答“哪个JVM”就是:使用加载应用程序的JVM!
可以对类加载器进行一些奇特的调整,这将证明我刚才说的一句话是例外。但在一般情况下和大多数应用程序中是正确的。

6
是的,您可以在单台计算机上运行多个JVM。
Sun以几种不同的方式打包运行jvm的工具。通常,您安装默认的java开发工具包(jdk)或Java标准版(jse)。这些软件包包括一个名为java的程序,用于启动jvm。此外,jdk还包含一些其他命令(如javac),供开发人员使用。
您可以在单台计算机上安装多个jdk和/或jse。在Windows上,jdk和jse软件包通常安装在 Program Files/java 下(由于我目前没有可用的pc,此处只是从记忆中推断)
在Mac上,请查看/System/Library/Frameworks/JavaVM.framework/Versions。
在Linux上,我会使用which java命令来确定默认java命令的安装位置(通常为/usr/bin)。然后,在内部执行ls -al | grep java(例如在/usr/bin中),并注意符号链接指向的位置,以便找出是否安装了其他版本。
一旦确定了系统上各个jdk和jse的位置,就可以开始确定每个程序使用哪个java版本启动。
每个java程序都将使用默认jvm启动。打开控制台或终端,并尝试java-version以确定当前默认版本。
与其使用默认的java版本,还可以启动程序以使用特定的java版本。例如,有时我会创建一个自定义的Windows快捷方式来使用特定版本的jdk打开Eclipse。
从Java 5开始,有一个名为jconsole的工具,可能还可以帮助您确定哪些程序在哪个版本的jvm中运行。只需打开控制台并键入jconsole,您应该会得到一个漂亮的GUI,显示所有在默认jvm中运行的程序。我认为您甚至可以检查程序的类路径。
希望这可以帮到您,祝您好运!

3

我可以运行多个JVM吗?

可以 - 只需运行“java”进程即可。

如果可以,那么如何确定特定的类加载在哪个JVM上?

与JAVA SDK一起分发的“jps”程序将列出在您的计算机上运行的所有java进程(JVM),由每个JVM执行的主类以及类路径。您需要查看每个类路径中有哪些jar或类来确定是否已加载类。

尝试运行以下命令:

jps -mlvV

看看你能得到什么


1

是的,您可以在计算机上安装多个JVM,因为操作系统会在RAM中加载JVM的一个实例(而不是整个JVM)。我们可以通过设置其路径来调用不同的JVM,例如JDK 1.4或JDK 1.6。


0

多个JRE(Java Runtime Environment)是完全可能的。我就这么做。问题在于JVM并不总是在您的系统上运行。它就像其他任何软件一样。当您运行一个jar文件时,它开始运行。

默认的JRE设置为环境变量中的JAVA_HOME(右键单击我的电脑 -> 属性 -> 高级选项卡 -> 环境变量)

要运行jar文件,只需运行此命令:

C:\Program Files\Java\j2re1.4.2_04\bin\javaw.exe" -jar Myfile.jar

您可以使用任何其他jre javaw来运行jar文件。

请注意,j2re1.4.2_04可能不是您的jre版本。

编辑:

jar文件中的所有类都在单个JVM上运行。正如您所猜测的那样。查看您的JAVA_HOME,它是默认值。


0
您可以在同一台计算机上运行任意数量的JVM。您只需要打开多个命令提示符窗口,并通过javajavaw应用程序运行所需内容。每个JVM正在运行的类是包含main()方法的那个类。当您启动Java应用程序时,Main()方法是第一个运行的东西。当然,main()位于您的某些类中。就这些。

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