Выборка памяти с помощью jvisualvm

Я использую функцию выборки памяти Java Visual VM и не могу ответить на вопросы:

  1. Почему создается так много экземпляров?

  2. Почему это количество экземпляров и байтов продолжает расти?

Например, я создал очень простую программу на Java следующим образом:

public class TestMemory{
    public static void main(String[] args) throws InterruptedException {
        System.out.println("Hello");
        Thread.sleep(60 * 60 * 1000);
    }
} 

И я вижу в Java Visual VM, что есть 611 классов. Количество экземпляров продолжает увеличиваться с 25 000 до почти 50 000, а затем падает до примерно 25 000. Причина уменьшения количества экземпляров может быть вызвана GC, но я не знаю, почему эти цифры такие динамичные, хотя я ничего не делаю со своей программой.


person tuan    schedule 21.01.2013    source источник


Ответы (1)


Количество экземпляров и байтов, на которые вы смотрите, — это стоимость мониторинга приложения из VisualVM. VisualVM непрерывно опрашивает различные MBean-компоненты JVM, чтобы анализировать изменение значения вашего приложения.

Чтобы убедиться в этом, вы можете перейти на вкладку Сэмплер. Нажмите на подвкладку Распределение по потокам. Посмотрите, является ли занятый поток RMI TCP Connection(n). Этот поток должен иметь большое выделение байтов в секунду.

Мне тоже было любопытно, как это оптимизировать, поэтому я разместил более конкретный вопрос .

person ceilfors    schedule 11.06.2013