Использование VisualVM Charts API в своём JAVA приложении

Здравствуйте, в данной небольшой статье я хочу привести пример использования VisualVM Charts API. Я не буду писать о том, что такое VisualVM, думаю многие Java разработчики знают об этом инструменте для диагностики, ну а если нет можете почитать о нём здесь: http://habrahabr.ru/blogs/java/61857/

Итак, а что же такое VisualVM Charts API? Тем кто работал с VisualVM наверняка понравились графики, на которых можно посмотреть использование памяти приложением, загрузку CPU и т.д. Вот пример:

image

Так вот, с помощью VisualVM Charts API вы можете создавать такие графики и в своём приложении. Надо отметить, что VisualVM Charts API не предоставляет разработчику таких возможностей как jFreeChart или jChart2D, но зато несомненными плюсами являются скорость работы и простота использования, а ещё графики являются довольно красивыми. Так что их можно быстро внедрить в своё приложение для мониторинга различных процессов.

В качестве примера работы с VisualVM Charts API я напишу небольшую программку, где на графиках мы увидим, как эта программа использует память. Для работы нам понадобятся следующие файлы: com-sun-tools-visualvm-charts.jar, org-netbeans-lib-profiler-charts.jar, org-netbeans-lib-profiler-ui.jar, org-openide-util.jar. Найти их можете в папке JDK. Я, например, их скопировал и сделал библиотеку, ну это кому как удобно.

image

Теперь можно приступать. Для того чтобы сделать такой монитор нам понадобиться написать довольно мало кода. Вот собственно и он:

public class ChartPanel extends JPanel {

private SimpleXYChartSupport support;
 private Runtime runtime = Runtime.getRuntime();

public ChartPanel() {
 createModels();
 add(support.getChart());
 support.getChart().setBounds(1, 1, 598, 298);
 }

private void createModels() {
 SimpleXYChartDescriptor descriptor = SimpleXYChartDescriptor.bytes(0,
 runtime.totalMemory()/(1024*1024),
 runtime.totalMemory()/(1024*1024),
 false,
 1000);

descriptor.addLineFillItems("Heap Size");
 descriptor.addLineFillItems("Used Heap");
 support = ChartFactory.createSimpleXYChart(descriptor);
 new Generator().start();
 }

private class Generator extends Thread {

@Override
 public void run() {
 while (true) {
 try {
 Thread.sleep(100);
 long[] values = new long[2];
 values[0] = runtime.totalMemory();
 values[1] = runtime.totalMemory() - runtime.freeMemory();
 support.addValues(System.currentTimeMillis(), values);
 }
 catch (Exception e){
 e.printStackTrace(System.err);
 }
 }
 }
 }
}


Теперь помещаем эту панель на форму и наслаждаемся результатом:

image

Как я и говорил таких возможностей как в jFreeChart здесь нет, но VisualVM Charts API позволяет выбрать тип графика. А именно: bytes (его мы использовали в примере), percent и decimal. Ну и само собой можно менять цвета. Вот что будет, если заменить строчки:

descriptor.addLineFillItems("Heap Size");
descriptor.addLineFillItems("Used Heap");


на

Color heap = new Color(255, 127, 127);
Color used = new Color(127, 63, 191);
descriptor.addItem("Heap Size", heap, 0, heap, heap, heap);
descriptor.addItem("Used Heap", used, 0, used, used, used);


image

На этом всё. Этот пример в виде проекта NetBeans можно скачать здесь: http://scream3r.org/habr/VisualVM_Chart_Example.zip В папке VisualVM_Charts находятся все необходимые файлы, а в папке VisualVM_Chart_Example сам проект.

Материал подготовлен на основе статьи Real-Time Charts on the Java Desktop, прочитать которую можно здесь: http://java.dzone.com/news/real-time-charts-java-desktop


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.