小工具:内存监视器(SystemMonitor)
2016-04-03 20:04
387 查看
卸了360之后,与之捆绑的加速球也没了。加速球可以查看剩余内存量,清理残留进程,有的时候不觉得这小玩意有多大作用,卸了之后才知道后悔。
加速球的替代方案比比皆是,如Windows自带的任务管理器,窗口底部能看到内存使用率,手动杀死进程能释放资源。笔者是个追求视觉效果的人,就觉得任务管理器的显示效果太直白,缺乏美感,于是萌生了自己动手写个“内存监视器”的想法。
内存监视器,顾名思义,就是监视内存的使用情况,涉及到读取内存信息和显示汇总结果两方面内容。读取内存信息可以借助SIGAR库,显示汇总结果有JFreeChart。
SIGAR,即System Information Gatherer And Reporter,跨平台,支持多种语言,提供轻便的接口来收集CPU,内存,交换区,账户,文件系统,网络等信息。
JFreeChart用来创建高质量图表,支持2D或3D的扇形图,柱形图,折线图等图表类型,还能以PNG,JPEG,PDF,SVG的格式导出图表。
因为可以在官方站点找到帮助文档,所以此处不再冗述其使用方法。
内存监视器的设计思想是每秒收集一次内存使用率,汇总起来绘制折线图,详细的源码如下:
效果截图
github链接:https://github.com/Warnier-zhang/SystemMonitor.git。
加速球的替代方案比比皆是,如Windows自带的任务管理器,窗口底部能看到内存使用率,手动杀死进程能释放资源。笔者是个追求视觉效果的人,就觉得任务管理器的显示效果太直白,缺乏美感,于是萌生了自己动手写个“内存监视器”的想法。
内存监视器,顾名思义,就是监视内存的使用情况,涉及到读取内存信息和显示汇总结果两方面内容。读取内存信息可以借助SIGAR库,显示汇总结果有JFreeChart。
SIGAR,即System Information Gatherer And Reporter,跨平台,支持多种语言,提供轻便的接口来收集CPU,内存,交换区,账户,文件系统,网络等信息。
JFreeChart用来创建高质量图表,支持2D或3D的扇形图,柱形图,折线图等图表类型,还能以PNG,JPEG,PDF,SVG的格式导出图表。
因为可以在官方站点找到帮助文档,所以此处不再冗述其使用方法。
内存监视器的设计思想是每秒收集一次内存使用率,汇总起来绘制折线图,详细的源码如下:
package org.warnier.zhang.systemmonitor; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.StandardChartTheme; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.ui.ApplicationFrame; import org.warnier.zhang.systemmonitor.util.SystemMonitor; import javax.swing.*; import java.awt.*; import java.text.SimpleDateFormat; import java.util.*; import java.util.List; import java.util.Timer; /** * Startpoint for whole project. */ public class Console extends ApplicationFrame { private static final long delayMillis = 1000; private List<Map<String, Double>> dataSet = new ArrayList<>(8); public Console(String title) { super(title); ChartFactory.setChartTheme(getTheme()); //Gather system info. gatherSystemInfo(); } //Enable zh_CN. private StandardChartTheme getTheme() { StandardChartTheme theme = new StandardChartTheme("CN"); Font font = new Font("宋体", Font.PLAIN, 12); theme.setExtraLargeFont(new Font("宋体", Font.BOLD, 18)); theme.setRegularFont(font); theme.setLargeFont(font); return theme; } private void gatherSystemInfo() { final SystemMonitor monitor = new SystemMonitor(); new Timer().schedule(new TimerTask() { @Override public void run() { Map<String, Double> dataItem = new HashMap<>(1); dataItem.put(SimpleDateFormat.getTimeInstance().format(new Date()), monitor.getMemory()); dataSet.add(dataItem); //Retain 8 latest items. if (dataSet.size() > 8) { dataSet.remove(0); } invalidate(getChart()); } }, 0, delayMillis); } private void invalidate(JFreeChart chart) { ChartPanel chartPanel = new ChartPanel(chart); // ? Can't use zh_CN. //chartPanel.setFont(new Font("MS Song", Font.PLAIN, 12)); setContentPane(chartPanel); ((JPanel)getContentPane()).updateUI(); } private JFreeChart getChart() { JFreeChart chart = ChartFactory.createLineChart("内存监视器", null, null, wrapDataSet(dataSet)); return chart; } private DefaultCategoryDataset wrapDataSet(List<Map<String, Double>> rawData) { DefaultCategoryDataset dataSet = new DefaultCategoryDataset(); for (int i = 0; i < rawData.size(); i++) { for (Map.Entry<String, Double> entry : rawData.get(i).entrySet()) { dataSet.addValue(entry.getValue(), "内存占用率", entry.getKey()); } } return dataSet; } public static void main(String[] args) { Console console = new Console("System Monitor"); console.setSize(680, 420); console.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); console.setVisible(true); } }
效果截图
github链接:https://github.com/Warnier-zhang/SystemMonitor.git。
相关文章推荐
- 20145335郝昊《java程序设计》第5周学习总结
- 2016 西班牙 国家德比(西甲31轮)
- 第五周学习进度条
- Ubuntu 16.04配置JDK1.8.0_77教程
- CodeForces 658A Bear and Reverse Radewoosh
- python 网络编程 (1)
- Linux内核分析— —创建新进程的过程
- hdu 4612 强连通
- leetcode 35. Search Insert Position
- 轻松理解KMP算法
- JSP课程设计感悟
- 20145303 《Java程序设计》第5周学习总结
- c语言中的const的用法
- Processes and Threads
- PHP开发环境搭建
- 第五周项目24-角色的武器类
- Linux - 打印文件夹全部文件 代码(C)
- 我想和你虚度光阴
- Myclipse关于不能同时发布项目到几个服务器的尝试
- Android设计模式应用-装饰器模式