Почему утечка памяти из Intellij Heap в Hello World с Thread.Sleep?

Я заметил, что использование памяти кучи увеличивается в других программах, поэтому я сделал эту простую программу, чтобы увидеть, сообщает ли JConsole то же самое в простом приложении HelloWorld. Я добавил Thread.sleep() в цикл, чтобы сохранить приложение для тестирования.

Каков источник этой проблемы? Должен ли я быть обеспокоен?

Эта диаграмма показывает мои настройки тестирования:

введите описание изображения здесь

Вот код, который я использую для тестирования:

public class Main {
public static void main(String[] args) {
    System.out.println("Hello World!");
    while(true)
    {
        try {
            System.out.print("Sleeping...");
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Working");
    }
}
}

Эта диаграмма показывает, что куча памяти удваивается в течение 15 минут:

введите описание изображения здесь

Через 25 минут я увидел исправленную память, но та же утечка продолжилась оттуда:

введите описание изображения здесь

Это просто интеллигент ведет себя? Достаточно ли восстановленной памяти, чтобы сказать, что это не утечка?

Примечание: система MacOS High Sierra на MacBook Pro 2,8 ГГц, 16 ГБ. IntelliJ Ultimate 2018.2.

1 ответ

Решение

Как предположил Джейкоб, это совершенно нормально.

Как предположил Питер, я тестировал с Java Mission Control и проверял, что куча памяти после последовательных сборок мусора была достаточно стабильной (было бы неплохо, если бы я мог навести курсор на эти минимумы, чтобы получить точные значения).

Я по-прежнему обеспокоен тем, что такая маленькая тестовая программа выделяет 140 МБ на регулярной основе. Я бы ожидал чего-то гораздо более низкого.

Вот скриншот JMC с выводами:

введите описание изображения здесь

Другие вопросы по тегам