8

我很难写出这个问题的标题,但这是我的情况和我要问的:

  • 我有一个 Java 项目,我在上面运行“ant test”来运行测试
  • 运行测试大约需要 10 分钟
  • 我可以在运行这些测试的过程中切换到不同的 Git 分支而不会产生任何后果吗?
  • 我希望测试针对原始代码完成,并允许我在发生这种情况时简单地在不同的分支上工作。

我想我的问题的根源是:加载并运行应用程序后是否需要 .class 文件? 类只是存储在内存中,我不再需要文件系统上的文件了吗?还是它仍然访问/读取文件系统上的东西?

任何洞察或更好地理解 java 对运行应用程序的需求都值得赞赏。

4

5 回答 5

6

类是按需加载的。在引用该类之前,类加载器不会尝试加载该类。因此,在运行过程中从类路径中删除类文件几乎肯定会导致失败。

于 2013-03-07T21:01:29.190 回答
3

如果您在测试运行时不将从 Git 获取的 .java 文件编译到同一位置,那么 .class 文件不会有问题 - 无论 IDE 如何加载类。

于 2013-03-07T21:00:48.200 回答
0

好吧,我认为您必须退后一步并重新考虑解决方案。

您写道,您执行集成测试。作为测试的一部分,您正在切换经过测试的源。如果这样做,您将产生无用的测试数据,因为您无法确定真正执行了什么。

如果您想测试软件的两个不同的 vrsion / 分支,只需启用两个测试运行并比较结果。

如果您使用过 *.class 文件,您只能确定它已加载。加载类文件后,它留在 JVM 的内存中。如果一段时间未使用并且 GEM 空间变低,它可能会被卸载(但我不这么认为)。

于 2013-03-07T21:11:13.267 回答
0

在标准(我的意思是 sun/oracle)JVM 中,一旦加载了一个类,它就会留在内存中,直到 jvm 关闭,但它可能尚未加载,因为类是按需加载的。

于 2013-03-07T21:02:32.677 回答
0

如果所有文件都已加载到内存中,则不需要...但是您如何确保所有类都已加载到内存中...所以您需要类路径中的类文件

于 2013-03-07T21:02:35.320 回答