Лучший способ измерить использование памяти Java-программой? - PullRequest
6 голосов
/ 21 августа 2010

Я сейчас использую VisualVM , но проблема в том, что я не могу сохранить графики, которые он генерирует.Мне нужно сообщить некоторые данные об использовании памяти и времени выполнения, хотя время выполнения легко получить с помощью System.nanoTime().Я также попробовал профилировщик NetBeans , но это не то, что я хочу, так как я не ищу конкретные детали, которые замедлили бы его или что-то еще, так что это было бы излишним.Самая большая проблема в том, что он потребляет слишком много времени на обработку.Также не позволяет мне легко захватывать / передавать данные, как VisualVM, по крайней мере, насколько я могу судить.

В идеале, лучший способ сделать это - вызов метода, потому что тогда я будуЯ могу получать информацию намного проще, но все, что угодно, например VisualVM, позволяет мне сохранять график.Производительность с VisualVM тоже довольно хорошая, по сравнению с профилировщиком NetBeans, хотя я полагаю, что это потому, что я не использовал его профилировщик.

В настоящее время я использую Ubuntu, но Windows 7 в порядке.Я предпочел бы иметь программу, которая специализируется на этом, хотя, поскольку информация, полученная программами, которые не включают JVM, и другие вещи, которые лучше не учитывать.

Ну, очевидно,вы можете сохранять снимки текущего сеанса и максимизировать окно в VisualVM, чтобы вы могли увеличить диаграммы, сделать снимок и вырезать их ... Но это своего рода хак.Лучшие предложения приветствуются.

Ответы [ 5 ]

15 голосов
/ 21 августа 2010
Runtime.getRuntime().freeMemory();

Runtime.getRuntime().totalMemory();
3 голосов
/ 21 августа 2010

Посмотрите на класс Runtime .У него есть freeMemory, maxMemory и totalMemory.Это, вероятно, достаточно близко для ваших целей.

2 голосов
/ 21 августа 2010

Вы можете предпочесть изящный метод для измерения памяти, а не для взлома изображения.JConsole известна как Monitor Applications JMX , она предоставляет программный API.Я думаю, это то, что вам нужно.

См .: Использование JConsole для мониторинга приложений

0 голосов
/ 21 августа 2010

Консоль HPjmeter бесплатна.Запустите ваш Java-процесс с -Xloggc:<file> и откройте <file> с ним.Вы можете не только сохранять свои сессии, но и сравнивать прогоны.Другие варианты, которые следует учитывать, в том числе в командной строке:

-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
0 голосов
/ 21 августа 2010

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

...