2013-03-07 47 views
8

我有一个很难写的标题到这个问题,但这里是我的情况,什么我问:应用程序运行后是否需要java .class文件?

  • 我有上运行的“蚂蚁测试” Java项目运行测试
  • 测试需要大约10分钟才能运行
  • 我可以在运行这些测试的过程中切换到不同的Git分支而没有任何后果吗?
  • 我想要测试完成对原始代码,并允许我简单地在不同的分支上工作,而发生这种情况。

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

感谢任何洞察或更好地理解Java运行的应用程序需要什么。

回答

6

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

+0

明白了,所以如果我知道所有的类都加载了,它可能会没问题,但是没有一个很好的方法来知道这一点,所以不安全。谢谢 – 2013-03-07 21:54:59

3

如果您在编译运行测试时从Git获取的.java文件不会遇到.class文件的问题 - 无论IDE如何加载类。

+1

*“除非您在测试运行时在同一位置编译.java文件”*但这个想法是合理的) – MadProgrammer 2013-03-07 21:02:46

+0

好点<;)> – ddmps 2013-03-07 21:14:18

+0

这实际上是有帮助的。我的“ant test”命令编译到与我的IDE不同的位置,所以我可以实际签出.java文件的不同分支,而不必担心正在运行的测试。 .class文件的文件夹显然是.gitignore'd,所以这可能没有问题。谢谢! – 2013-03-07 21:58:53

0

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

0

如果所有的文件都被加载到内存中,那么它不会被需要......但是那么如何确保所有的类都被加载到内存中......所以你需要类路径中的类文件

0

嗯,我认为你必须向后退一步,重新考虑解决方案。

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

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

如果您已经使用过,则只能确定加载了* .class文件。在加载类文件之后,它保留在JVM的内存中。也许它会被卸载,如果一段时间未使用,创业板空间越来越小(但我不这么认为)。

+0

感谢您的回答。我没有试图一次测试两个分支。我只是想测试一个分支,并在另一个分支上做一些工作。我想用原始分支的代码完成测试。 – 2013-03-07 21:53:03

+0

试试哈德森或jekins。使集成测试不在工作区中。 – 2013-03-07 23:03:08

+0

我们使用Bamboo,但我通常会在推送之前尝试运行测试,以便我知道我不会为其他开发人员打破构建。 – 2013-03-07 23:05:20

相关问题