【问题标题】:How to know in which JVM my programme is running?如何知道我的程序在哪个 JVM 中运行?
【发布时间】:2011-12-26 11:07:52
【问题描述】:

各位朋友, 我对JVM有点困惑。首先我想知道是不是每个java程序(进程) 运行在单独的 JVM 或同一个 JVM 中

例如,我正在运行两个名为 ABC 和 DEF 的项目,它们都从自己的项目开始 主要方法。第一个项目有类Test1(主类),第二个项目有Test2(主类)。现在我试图通过启动第二个项目说哈希表大小来访问第一个项目的一些信息,但是当我在第二个项目中查询哈希表(第一个项目)的大小时,它的大小显示为零,尽管在开始第一个项目之前我已向 Hashtable 添加了四个元素。 谁能描述我为什么会这样。 我在想所有的java进程都在他们自己的JVM中运行。我对吗! 如果是,那么我如何在同一个 JVM 中运行两个不同的 java 进程。 感谢期待。

【问题讨论】:

  • 您可以考虑使用线程并让每个线程独立运行。我认为 hashtable 不能很好地支持并发,你应该改用 hashmap;我不确定,你必须检查一下。

标签: java jvm


【解决方案1】:

您可以在同一个 JVM 或不同的 JVM 中运行两个 main 方法。但是,除非您的集合是完全相同的对象或者您使用的是分布式集合,否则它们将是两个独立的集合。

如果你想让两段代码改变集合,最简单的解决方案是有一个程序。

【讨论】:

  • 我的 Collection 对象是静态对象(即我的 Hashtable)。我仍然无法确定两个主要类(哪些具有主要方法)是在同一个 JVM 中运行还是在不同的 JVM 中运行?如果我同时运行它们,那么我将能够正确访问后续的类变量,就像它们属于同一个项目一样。如果我使用普通的 var。而不是 Collection 对象,那么它是否会给出正确的结果。
  • 如果你在同一个 JVM 中使用共享的 Hashtable,它应该可以按你的需要工作。
  • >>我仍然无法确定两个主要类(具有 main 方法)是在同一个 JVM 中运行还是在不同的 JVM 中运行?
  • @user1057583 每次从命令行运行新命令时,您都在运行一个新程序。有些环境不会在您启动的命令中运行代码,而是在共享进程中运行代码,例如scalac,但 Java 默认不这样做。
【解决方案2】:

嗯,这取决于您如何实现这种行为,在我看来,您正在尝试在应用程序之间共享对象。我不是这方面的专家,但你可以在这里传递:

他们在这里使用JNDI approach,我认为它更简单,可以指导你完成你想做的事情,我喜欢这个结论:

通过建立在序列化和持久性的基础之上,JNDIHashtable 允许您在对象持久性领域中更加灵活。您不需要将对象映射到数据库表或通过 CORBA 或 EJB 托管它们。而且由于对象是远程存储的,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    相关资源
    最近更新 更多