我注意到Java VM按需加载了类。
所以在一个大型项目中,如果我们对单个类进行更改并进行编译,那么它会立即影响系统中当前运行的java进程吗?
假设我没有将输出存储在某个JAR文件中。
答案 0 :(得分:1)
当你运行java项目时,或者在javaee War应用程序中.. Java作为加载所有类的ClassLoader,这就是JVM所做的。
http://en.wikipedia.org/wiki/Java_Classloader
因此,如果您想要更改类,则必须重新启动应用程序或服务器。有一些框架可以“动态”上传战争,如下所示:
http://zeroturnaround.com/software/jrebel/
但如果这不是用于生产用途..只需重新启动您的应用程序:)
希望有所帮助
答案 1 :(得分:0)
假设您谈论开发环境?
这里的目标是什么 - 仅编译或编译并部署到应用服务器?
如果您的课程与编译相同,那么这是最佳实践 - 您可以调整构建和部署,以便将其编译到您的工作区,但然后将类复制到.... / deploy文件夹中正确的结构和应用服务器从那里选择它们。这种方式没有锁定运行应用程序。可以编译而不是随意部署。如果你想进行热部署,并且它们不是jar中的类,那么jvm可能不会对类进行锁定。