Если Вы смотрящий специально для в памяти JVM:
Runtime runtime = Runtime.getRuntime();
NumberFormat format = NumberFormat.getInstance();
StringBuilder sb = new StringBuilder();
long maxMemory = runtime.maxMemory();
long allocatedMemory = runtime.totalMemory();
long freeMemory = runtime.freeMemory();
sb.append("free memory: " + format.format(freeMemory / 1024) + "<br/>");
sb.append("allocated memory: " + format.format(allocatedMemory / 1024) + "<br/>");
sb.append("max memory: " + format.format(maxMemory / 1024) + "<br/>");
sb.append("total free memory: " + format.format((freeMemory + (maxMemory - allocatedMemory)) / 1024) + "<br/>");
Однако они должны быть взяты только оценка...
Если Вы используете Tomcat, проверяете Датчик фунта на квадратный дюйм , который позволяет Вам контролировать потребление внутренней памяти и внешней памяти, а также хост других областей.
профилировщик YourKit Java является превосходным коммерческим решением. Можно найти дополнительную информацию в документах о ЦП, представляющий и память, представляющая .
JConsole является простым способом контролировать под управлением JAVA-приложение, или можно использовать Профилировщика для получения более подробной информации о приложении. Мне нравится использовать Профилировщик NetBeans для этого.
Java Время выполнения объект может сообщить об использовании памяти JVM. Для потребления ресурсов ЦП необходимо будет использовать внешнюю утилиту, как главный или Windows Process Manager Unix.
Начиная с Java 1.5 JDK идет с новым инструментом: JConsole, который может показать Вам ЦП и использование памяти любых 1.5 или более поздней JVM. Это может сделать диаграммы этих параметров, экспорта в CSV, показать количество загруженных классов, количество экземпляров, мертвых блокировок, распараллеливает и т.д.
Для использования памяти следующее будет работать,
long total = Runtime.getRuntime().totalMemory();
long used = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
Для использования ЦП, необходимо будет использовать внешнее приложение для измерения его.
JMX, MXBeans (ThreadMXBean, и т.д.) обеспеченный даст Вам использования ЦП и Память.
OperatingSystemMXBean operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
operatingSystemMXBean.getSystemCpuLoad();
Если Вы используете JVM Sun и интересуетесь использованием внутренней памяти приложения (сколько из выделенной памяти Ваше приложение использует), я предпочитаю включать встроенный вход сборки "мусора" JVMs. Вы просто добавляете-verbose:gc к команде запуска.
Из документации Sun:
параметр командной строки-verbose:gc печатает информацию в каждом наборе. Обратите внимание, что формат вывода-verbose:gc подвержен изменениям между выпусками платформы J2SE. Например, здесь производится из большого серверного приложения:
[GC 325407K->83000K(776768K), 0.2300771 secs] [GC 325816K->83372K(776768K), 0.2454258 secs] [Full GC 267628K->83769K(776768K), 1.8479984 secs]
Здесь мы видим два незначительных набора и один главный. Числа прежде и после стрелки
325407K->83000K (in the first line)
указывают на объединенный размер живых объектов прежде и после сборки "мусора", соответственно. После незначительных наборов количество включает объекты, которые не обязательно живы, но не могут быть исправлены, или потому что они непосредственно живы, или потому что они в или сосланы от штатного поколения. Число в круглой скобке
(776768K) (in the first line)
является общим свободным местом, не считая пространство в постоянном поколении, которое является общей "кучей" минус одни из пробелов оставшегося в живых. Незначительный набор взял приблизительно четверть секунды.
0.2300771 secs (in the first line)
Для большего количества информации см.: http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
Если Вы используете runtime/totalMemory решение, которое было отправлено во многих ответах здесь (я сделал это много), несомненно, вызовут две сборки "мусора" сначала, если Вы хотите довольно точные/последовательные результаты.
Для effiency Java обычно позволяет мусору заполнять всю память прежде, чем вызвать GC, и даже тогда это обычно не полный GC, таким образом, Ваши результаты для runtime.freeMemory () всегда быть где-нибудь между "реальной" суммой свободной памяти и 0.
первый GC не получает все, он получает максимум от него.
подъем состоит в том, что, если Вы просто делаете freeMemory () вызов, Вы получите число, которое абсолютно бесполезно и значительно различается, но если делают 2 gc, первые, это - очень надежный индикатор. Это также делает стандартную программу НАМНОГО медленнее (секунды, возможно).