Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用程序运行后是否需要java.class文件?_Java_Git_Classloader - Fatal编程技术网

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

应用程序运行后是否需要java.class文件?,java,git,classloader,Java,Git,Classloader,我很难写出这个问题的标题,但以下是我的情况和我的问题: 我有一个Java项目,我运行“ant测试”来运行测试 测试运行大约需要10分钟 在运行这些测试的过程中,我可以切换到不同的Git分支吗? 我希望根据原始代码完成测试,并允许我在测试过程中处理不同的分支 我想我的问题的根源是:应用程序加载并运行后是否需要.class文件?这些类只是存储在内存中,而我不再需要文件系统中的文件了?或者它仍然访问/读取文件系统上的内容 如果您不在测试运行时将从Git获得的.java文件编译到同一位置,那么无论I

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

  • 我有一个Java项目,我运行“ant测试”来运行测试
  • 测试运行大约需要10分钟
  • 在运行这些测试的过程中,我可以切换到不同的Git分支吗?
  • 我希望根据原始代码完成测试,并允许我在测试过程中处理不同的分支
我想我的问题的根源是:应用程序加载并运行后是否需要.class文件?这些类只是存储在内存中,而我不再需要文件系统中的文件了?或者它仍然访问/读取文件系统上的内容


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

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

< P>标准(我是Sun/Oracle)JVM,一旦一个类被加载,它就留在内存中,直到JVM关闭,但是它可能还没有被加载,因为类是按需加载的。

如果所有的文件都加载到内存中,那么它就不需要了……但是,你怎么能确保所有的类都加载到内存中呢……所以你需要类路径中的类文件呢

我想你必须后退一步,重新思考一下这个问题解决方案

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

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


只有在使用过*.class文件的情况下,才能确保已加载该文件。加载类文件后,它将保留在JVM的内存中。如果它被闲置了一段时间,并且GEM空间越来越小,那么它可能会被卸载(但我不这么认为)

“除非您在测试运行时在同一位置编译.java文件…”。。。。但这个想法是正确的;)这实际上是有帮助的。我的“ant test”命令确实编译到了与IDE不同的位置,因此我实际上可以签出.java文件的不同分支,而不用担心正在运行的测试。.class文件的文件夹显然是.gitignore'd,因此这可能不会出现问题。谢谢我把答案授予马克,因为它更准确地回答了我的确切问题,但你的回答对我的特定情况非常有帮助。谢谢again@SeanAdkinson不客气!我宁愿解决问题也不愿回答问题:)。谢谢你的回答。我不想同时测试两个分支。我只是想测试一个分支,然后在另一个分支上做一些工作。我希望测试使用原始分支的代码完成。请尝试hudson或jekins。使集成测试不在您的工作区中。我们使用Bambol,但我通常会在推送之前尝试运行测试,这样我就不会破坏其他开发人员的构建。明白了,所以如果我知道所有类都已加载,这可能没问题,但没有真正好的方法知道这一点,因此不安全。谢谢