Pull to refresh

Использование 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
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.