Почему утечка памяти из Intellij Heap в Hello World с Thread.Sleep? - PullRequest
0 голосов
/ 15 сентября 2018

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

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

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

enter image description here

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

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 минут:

enter image description here

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

enter image description here

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

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

1 Ответ

0 голосов
/ 17 сентября 2018

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

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

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

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

enter image description here

...