2009-12-31 107 views
7

我可以运行多个JVM吗?如果是的话,我怎么能找到一个特定的类加载到哪个JVM上?我可以在单台PC上运行多个JVM吗?

+1

你为什么想知道VM加载了哪个类?如果我们知道,也许我们可能会给你一个答案。 – TofuBeer 2009-12-31 18:32:12

+0

这听起来像你正试图做某件事情,应该以另一种方式来完成。您不需要知道在JVM上加载了哪个类。 – 2009-12-31 20:00:09

回答

12

这不是完全清楚你的意思,但是:

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

除非您正在运行调试代理或类似的东西,否则我不知道是否有任何方法要求JVM进程是否加载了特定的类。这似乎有点奇怪的要求 - 你为什么要这样做?

4

您可以运行尽可能多的JVM中,你可以适应您的磁盘和内存中:)

无论何时启动Java应用程序,你第一次启动JVM,然后告诉它要运行的应用程序。 “哪个JVM”的答案很简单:您加载应用程序的JVM!

有可能做一些深奥的类加载器摆弄,这将证明我刚才所说的异常。但在一般情况下以及所有应用程序中的大部分都是如此。

0

多个JRE(Java Runtime Enviroment)是非常可能的。我这样做。事情是JVM并不总是在你的系统上运行。它就像任何其他软件一样。当你运行一个jar文件时,它开始运行。

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

要运行一个jar文件,你只要运行这个命令:

C:\ PROGRAM 文件\的Java \ j2re1.4.2_04 \ BIN \ javaw.exe的” 罐子Myfile.jar

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

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

编辑:

在一个jar文件中运行的所有类上的单个JVM。你可能会猜到。看到你的JAVA_HOME,这是默认的。

3

我可以运行多个JVM吗?

是 - 只需运行“的Java”过程

如果是的话,我怎么能找到一个 特定的类装载上 JVM?

与JAVA SDK一起发布的'jps'程序将列出您机器上的所有java进程(JVM's)破坏,每个JVM和类路径正在执行的主类。您必须查看每个类路径上的哪些jar或类,以确定是否加载了类。

尝试运行

jps -mlvV 

,看看你得到

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版本。例如,有时我创建一个自定义窗口快捷方式来使用特定版本的jdk打开Eclipse。

从java 5开始,有一个名为jconsole的工具,它也可以帮助您确定哪些程序运行在哪些版本的jvms中。只需打开一个控制台,然后键入jconsole,您应该看到一个很好的GUI,它显示了在默认jvm中运行的所有程序。我想你甚至可以检查程序类路径。

希望有所帮助,祝你好运!

1

是的,你可以在你的PC上安装多个jvm,因为OS在RAM中加载了一个jvm(不是整个jvm)的实例。我们可以通过设置路径来调用JDK 1.4或JDK 1.6等不同的jvm。

0

您可以在同一台机器上运行尽可能多的JVM。你只需要打开几个CommandPrompt窗口,并通过javajavaw应用程序运行你想要的。每个JVM运行的类是那个包含main()方法的类。 Main()方法是在启动某个Java应用程序时运行的第一件事。当然,main()位于你的一些类中。就这样。