java动态打印_JFreeChart学习(三)——动态打印java内存使用情况

JFreeChart动态打印java内存使用情况

import java.awt.BasicStroke;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.BorderFactory;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.Timer;

import org.jfree.chart.ChartPanel;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.axis.DateAxis;

import org.jfree.chart.axis.NumberAxis;

import org.jfree.chart.plot.XYPlot;

import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;

import org.jfree.data.time.Millisecond;

import org.jfree.data.time.TimeSeries;

import org.jfree.data.time.TimeSeriesCollection;

import org.jfree.ui.RectangleInsets;

public class MemoryUsage extends JPanel {

class DataGenerator extends Timer implements ActionListener {

/*

* Invoked when an action occurs.

*

* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)

*/

public void actionPerformed(ActionEvent actionevent) {

long free = Runtime.getRuntime().freeMemory();

long total = Runtime.getRuntime().totalMemory();

addTotalObservation(total);

addFreeObservation(free);

}

DataGenerator(int i) {

super(i, null);

addActionListener(this);

}

}

public MemoryUsage(int maxItemAge) {

super(new BorderLayout());

total = new TimeSeries("Total Memory",

org.jfree.data.time.Millisecond.class);

total.setMaximumItemAge(maxItemAge);

// free = new TimeSeries("Free Memory",

// org.jfree.data.time.Millisecond.class);

free = new TimeSeries("Free Memory");

free.setMaximumItemAge(maxItemAge);

TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();

timeseriescollection.addSeries(total);

timeseriescollection.addSeries(free);

DateAxis dateaxis = new DateAxis("Time");

NumberAxis numberaxis = new NumberAxis("Memory");

dateaxis.setTickLabelFont(new Font("SansSerif", 0, 12));

numberaxis.setTickLabelFont(new Font("SansSerif", 0, 12));

dateaxis.setLabelFont(new Font("SansSerif", 0, 14));

numberaxis.setLabelFont(new Font("SansSerif", 0, 14));

dateaxis.setAutoRange(true);

dateaxis.setLowerMargin(0.0D);

dateaxis.setUpperMargin(0.0D);

dateaxis.setTickLabelsVisible(true);

numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer(

true, false);

xylineandshaperenderer.setSeriesPaint(0, Color.RED); // 改变第一个Series的颜色

xylineandshaperenderer.setSeriesPaint(1, Color.YELLOW);// 改变第二个Series的颜色

xylineandshaperenderer.setSeriesStroke(0, new BasicStroke(1F, 0, 2));

xylineandshaperenderer.setSeriesStroke(1, new BasicStroke(1F, 0, 2));

XYPlot xyplot = new XYPlot(timeseriescollection, dateaxis, numberaxis,

xylineandshaperenderer);

xyplot.setBackgroundPaint(Color.BLACK); // 改变背景颜色

xyplot.setDomainGridlinePaint(Color.white);

xyplot.setRangeGridlinePaint(Color.white);

xyplot.setAxisOffset(new RectangleInsets(1D, 1D, 1D, 1D));

JFreeChart jfreechart = new JFreeChart("JVM Memory Usage", new Font(

"SansSerif", 1, 24), xyplot, true);

jfreechart.setBackgroundPaint(Color.white);

ChartPanel chartpanel = new ChartPanel(jfreechart, true);

chartpanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory

.createEmptyBorder(10, 10, 10, 10), BorderFactory

.createLineBorder(Color.black)));

add(chartpanel);

}

private void addTotalObservation(double d) {

total.add(new Millisecond(), d);

}

private void addFreeObservation(double d) {

free.add(new Millisecond(), d);

}

/**

* @param args

*/

public static void main(String[] args) {

JFrame jframe = new JFrame("JVM Memory Usage");

MemoryUsage memoryusagedemo = new MemoryUsage(10000);

jframe.getContentPane().add(memoryusagedemo, "Center");

jframe.setBounds(200, 120, 1000, 500);

jframe.setVisible(true);

(memoryusagedemo.new DataGenerator(1000)).start();

jframe.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent windowevent) {

System.exit(0);

}

});

}

private TimeSeries total;

private TimeSeries free;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF中StringToImage和BoolToImage简单用法

在WPF的绑定控件操作中,经常会通过bool值或者某些特定的string值做出相应动作。但UI层控件的很多属性对应的都不是Bool值或者对应的只是固定的String值。 这个时候有两方法解决该问题。 1.是在后台cs中做出比较判断,然后根据相应结果传达UI层做出相应动作…

【必备】jQuery性能优化的38个建议

一、注意定义jQuery变量的时候添加var关键字这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下:$loading $(#loading); //这个是全局定义,不知道哪里位置倒霉引用了相同的变量名&#xf…

java中策略设计模式_Java中的设计模式(五):策略模式

策略设计模式是行为设计模式之一。当我们为特定任务使用多个算法时,使用策略模式,客户端决定在运行时使用的实际实现。策略模式的最佳示例之一是Collections.sort()采用Comparator参数的方法。基于Comparator接口的不同实现,对象将以不同的方…

isset函数

isset (PHP 4, PHP 5) isset — 检测变量是否设置 检测变量是否设置,并且不是 NULL。 如果 var 存在并且值不是 NULL 则返回 TRUE,否则返回 FALSE。 $a "test"; $b "anothertest";var_dump(isset($a)); // TRUE var_dump(i…

SQLl中的left join、right join、inner join详解

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只返回两个表中联结字段相等的行举例如下:--------------------------------------------表A记…

afudos备份bios不动_bios刷坏后的两种解决方法

通常主板新的BIOS可以修正旧版中BIOS的一些BUG,纠正对某些硬件和软件的兼容问题,添加新硬件的支持等等,所以有时我们需要刷新BIOS。但刷新主板BIOS实际上是存在一定风险的,虽然现在各主板厂商都推出了在Windows下刷新BIOS的软件&a…

光学基础知识:白光、颜色混合、RGB、色彩空间

1665年,牛顿(Isaac Newton)进行了太阳光实验,让太阳光通过窗板的小圆孔照射在玻璃三角棱镜上,光束在棱镜中折射后,扩散为一个连续的彩虹颜色带,牛顿称之为光谱,表示连续的可见光谱。而可见光谱只是所有电磁…

SQL Server各个版本功能比较

微软的SQlserver主要经历了从sql server 2000 到最新的sql server 2017,现把各个版本的更新特性介绍如下:SQL SERVER 2000日志传送索引视图SQL SERVER 2005数据库镜像(只有 SQL Server 2005 Enterprise Edition SP1 和更高版本支持异步数据库…

java hibernate的使用_《Hibernate快速开始 – 4 – 使用JAVA持久层 API (JPA)教程》

章节目标使用JPA EntityManagerFactory使用注解提供映射信息使用 JPA 接口本教程可在 entitymanger/ 路径下下载4.1. persistence.xml之前的章节使用了hibernate原生的配置文件hibernate.cfg.xml。然而,JPA中定义了不同的的自助配置文件persistence.xml。这个启动过…

HTTP消息中Header头部信息整理

1、HTTP请求方式GET向Web服务器请求一个文件POST向Web服务器发送数据让Web服务器进行处理PUT向Web服务器发送数据并存储在Web服务器内部HEAD检查一个对象是否存在DELETE从Web服务器上删除一个文件CONNECT对通道提供支持TRACE跟踪到服务器的路径OPTIONS查询Web服务器的性能说明&…

gdb命令中attach使用

[测试程序] 我们先看看我们的测试程序: /* in eg1.c */ int wib(int no1, int no2) { int result, diff; diff no1 - no2; result no1 / diff; return result; } int main() { pid_t pid; pid fork(); if (pid &…

java%4d_java积累

数组的使用package javaDemo;import java.util.*;/**** author Administrator* version 1.0***/public class test {public static void main(String[] args){String[] greeting new String[3];greeting[0] "Welcome to Core Java";greeting[1] "by Cay Hors…

查询CPU占用高的SQL语句的解决方案

触发器造成死锁、作业多且频繁、中间表的大量使用、游标的大量使用、索引的设计不合理、事务操作频繁、SQL语句设计不合理,都会造成查询效率低下、影响服务器性能的发挥。我们可以使用sql server自带的性能分析追踪工具sql profiler分析数据库设计所产生问题的来源&…

父类与子类之间的关系

1) 运行课件中的例题ParentChildTest.java,回答下列问题: a) 左边的程序运行结果是什么? b) 你如何解释会得到这样的输出? 第一个创建一个Parent对象,调用的是父类构造方法 第二个创建一个Child对象,调用的…

php获取到的json数据如何处理_php – 如何从API获取JSON数据

我使用过雅虎的符号查找它以JSON格式返回数据.喜欢以下YAHOO.Finance.SymbolSuggest.ssCallback({"ResultSet": {"Query": "ya","Result": [{"symbol": "YHOO","name": "Yahoo! Inc.","…

.NET开发中应该遵循的几点建议

1、始终控制类的大小那些超大的类在尝试做太多的事情,这违反了单一职责原则, 为什么一定要将两个职责分离到单独的类中呢?因为每一个职责都是变化的中心。在需求变更时,这个变更将会出现在负责该职责的类中。如果一个类承担了多个…

Linux下jetty报java.lang.OutOfMemoryError: PermGen space及Jetty内存配置调优解决方案

Linux下的jetty报java.lang.OutOfMemoryError: PermGen space及Jetty内存配置调优解决方案问题linux的jetty下发布程序后再启动jetty服务时,发现启动不了,从日志中找到报java.lang.OutOfMemoryError: PermGen space。原因分析PermGen space,全…

微博php sdk,手机第三方新浪微博登录php api实现分析

提供api,POST方式,根据传递过来的微博uid/appkey,判断该用户的ID是否在自己的数据库中。如果有,直接登录返回用户登录api的json。如果没有,就将该用户的IDtoken请求微博用户信息api:http://open.weibo.com/…

13条只有程序员才能懂的内涵段子

一、bug跟蚊子的相似之处:1、不知道藏在哪里。2、不知道有多少。3、总是在你即将睡觉休息的时候出现。二、A:最近在看《一拳超人》,觉得咱们程序猿跟埼玉老师有点像啊!B:哪里像了?A:越秃越强&am…

Posix消息队列

一、函数 mq_open 头文件 mqueue.h; 原型 mqd_t mq_open(const char *name, int oflag, .../*mode_t mode,struct mq_attr* attr*/); 函数功能 创建消息队列; 参数 name :消息队列的名字,根据消息队列的规则,为了更好的…