【问题标题】:What does it mean to have a forked java VM?拥有一个分叉的 java VM 意味着什么?
【发布时间】:2012-01-20 19:54:21
【问题描述】:

我在运行 JUnit 测试时有时会遇到此错误。

我并不是在问错误是什么。我只是想知道java VM分叉时是什么意思?

【问题讨论】:

  • 一般意义上的forking,在另一个JVM中执行一个jUnit任务。
  • 这意味着你分叉不好......
  • 了解确切的错误消息会很有帮助。这和你的问题相似吗? stackoverflow.com/questions/1846329/…
  • 例如在 ant 中,您可以指定是要在同一个 vm 中运行 junit,还是要创建一个新的(专门为 junit 管理堆)。我猜你的构建/测试工具有类似的东西。
  • 哈哈,谢谢你的回答。 @Paul,是的,它很相似,但我认为我的是 DLL 相关的。仍然很难找出问题所在。我的问题仍然得到了解答,这对我来说问题更少。

标签: java virtual-machine


【解决方案1】:

“分叉 VM”不是错误(尽管您得到的错误可能与它有关)。

一些涉及编译和测试各个方面的工具(例如 Maven)是用 Java 编写的,并使用 JVM 自行运行。

如果您在没有派生 VM 的情况下为您的应用程序运行单元测试,Maven 将在 Maven 正在运行的同一 VM 中运行这些测试。因此,它可能会受到某些 VM 范围的设置(例如某些系统属性)的影响。

为避免 Maven 带来的副作用,可以在分叉的 VM 中运行测试,也就是说,在一个完全独立的 VM 中作为操作系统中的不同进程运行。

(这可以适用于其他工具,Maven 只是一个例子。)

使分叉的 VM 崩溃至少可以让您回到启动和编排这些单元测试的其他 Java 应用程序。如果您在同一个 VM 中运行这些测试,您还会使启动测试的应用程序崩溃(因此得到的信息非常少)。

【讨论】:

    【解决方案2】:

    forkis 在 Linux 中用于表示执行另一个进程(松散地)的术语。在这种情况下,fork Java VM 是一个子进程,用于按类或方法隔离单元测试,确保多个测试之间不会发生状态污染。

    JUnit ant 任务支持多种分叉模式,如here 所示。

    我看到错误表明使用 JUnit 时分叉的 VM 已死亡。这意味着您的测试崩溃,并且您的 JUnit 运行器(通常是 ant)无法获得任何输出。

    您应该尝试解决崩溃的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多