Java Process仅在垃圾回收之后退出

时间:2018-10-22 13:57:34

标签: java spring garbage-collection project-reactor

我已经创建了一个CLI应用程序(使用Spring)来读取外部API,将其存储在数据库中并处理该数据。

要处理数据,我正在使用项目反应器(https://projectreactor.io/)并行执行操作。

但是我看到的是Java进程在需要做很多工作时不会退出。

我发现的是,当您触发完整的垃圾回收(例如,使用IQKeyboardManager.shared.enableAutoToolbar = false )时,该过程将停止。

因此,在这种情况下,挂起的不是线程(由我在应用程序中创建的)或怪异的死锁,而是垃圾回收器中的某些东西。

基本上我的程序是这样的:

jconsole

public class Runner { private static Logger logger = LoggerFactory.getLogger(Runner.class); public static void main(String[] args) { try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext()) { run(args, context); } catch (Throwable t) { logger.error("error", t); } finally { logger.info("closed application context"); } } } 方法会触发许多其他代码(我认为这不是很相关)。

有趣的是,run被记录下来,但是什么也没发生。

一些粗略的解决方案是在最后调用closed application contextSystem.gc(),但我希望有更好的(配置)解决方案?

0 个答案:

没有答案