Java Process выходит только после сборки мусора - PullRequest
0 голосов
/ 22 октября 2018

Я создал приложение CLI (используя Spring) для чтения внешних API, сохранения его в базе данных и обработки этих данных.

Для обработки данных я использую проектный реактор (* 1004)* делать вещи параллельно.

Однако я вижу, что Java-процесс не завершается, когда ему приходится выполнять большую работу.

Я обнаружил, чточто процесс останавливается, когда вы запускаете полную сборку мусора (например, с помощью 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 context регистрируется, но потом ничего не происходит.

Некоторым грубым решением было бы позвонить System.gc() и System.exit(0) в конце, но я 'Надеюсь, есть лучшие (конфигурационные) решения?

...