应用程序运行后是否需要java .class文件?

时间:2013-03-07 20:58:08

标签: java git classloader

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

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

我想我的问题的根源是:应用程序加载并运行后是否需要.class文件?这些类是否只存储在内存中,而我不需要上面的文件文件系统了吗?或者它仍然可以访问/读取文件系统上的内容吗?

对于正在运行的应用程序所需的java有任何见解或更好的理解。

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

在标准(我的意思是sun / oracle)JVM中加载一个类后,它会一直保留在内存中,直到jvm关闭,但由于类是按需加载的,所以它可能还没有加载。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

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

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