gpt4 book ai didi

java - 如何替换当前的 Java 进程,如 unix 风格的 exec?

转载 作者:搜寻专家 更新时间:2023-11-01 03:45:40 24 4
gpt4 key购买 nike

我有一个用 Java 编写的作为 Windows 服务运行的服务器(感谢 Install4J)。我希望此服务能够下载它运行的 JAR 文件的最新版本,并开始运行新代码。关键在于我不希望 Windows 服务完全退出。

理想情况下,我会通过 unix 风格的 exec() 调用来停止当前版本并运行新版本来完成此操作。我怎样才能最好地做到这一点?

最佳答案

这是一种复杂但可移植的方法。

将您的代码分成两个 jar 。一个非常小的 jar 只是用来管理进程启动的。它创建一个 ClassLoader,将另一个 jar 保存在其类路径中。

当你想加载一个新版本时,你会终止所有从旧 jar 运行代码的线程。从旧 jar 中清除所有对类实例的引用。清空所有对加载旧 jar 的 ClassLoader 的引用。此时,如果您没有遗漏任何东西,旧类和 ClassLoader 应该有资格进行垃圾回收。

现在您从指向新 jar 的新 ClassLoader 实例重新开始,并重新启动您的应用程序代码。

关于java - 如何替换当前的 Java 进程,如 unix 风格的 exec?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/198122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com