卸了360之后,与之捆绑的加速球也没了。加速球可以查看剩余内存量,清理残留进程,有的时候不觉得这小玩意有多大作用,卸了之后才知道后悔。

  加速球的替代方案比比皆是,如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 = ;
private List<Map<String, Double>> dataSet = new ArrayList<>(); 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, );
theme.setExtraLargeFont(new Font("宋体", Font.BOLD, ));
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<>();
dataItem.put(SimpleDateFormat.getTimeInstance().format(new Date()), monitor.getMemory());
dataSet.add(dataItem);
//Retain 8 latest items.
if (dataSet.size() > ) {
dataSet.remove();
}
invalidate(getChart());
}
}, , 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 = ; 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(, );
console.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
console.setVisible(true);
}
}

  效果截图

  github链接:https://github.com/Warnier-zhang/SystemMonitor.git。

最新文章

  1. IntelliJ IDEA mac 快捷键
  2. Linux C 字符串函数 sprintf()、snprintf() 详解
  3. JS IOS/iPhone的Safari不兼容Javascript中的Date()问题
  4. NPOI简介
  5. winform调用浏览器
  6. 智能手机,医疗诊断,云会议(gotomeeting/citrix)
  7. weblogic启动报错之WLS_DIAGNOSTICS000000.DAT
  8. SQL查询优化
  9. C++ Primer的课后规划问题的第八章
  10. css叠加原则,就近原则
  11. 训练 smallcorgi/Faster-RCNN_TF 模型(附ImageNet model百度云下载地址)
  12. 关于Appium android input manager for Unicode 提示信息
  13. 来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor
  14. 《剑指offer》二叉搜索树的后序遍历序列
  15. centos7中安装、配置jdk(转载)
  16. jQuery webcam plugin
  17. PHP文件解密服务,微擎微赞模块解密,微擎模块解密
  18. [CTCI] 子串判断
  19. Apache2.4.7 + php5 + mysql thinkphp
  20. poj1088(记忆化搜索入门题)

热门文章

  1. Enum变量值的Discretion
  2. RH133读书笔记(1)-Lab 1 Managing Startup
  3. offsetTop和scrollTop差异
  4. Unity3d该物业(Attributes)整理
  5. 构建安全的Xml Web Service系列之wse之错误代码详解
  6. 【POJ】The Suspects(裸并查集)
  7. Android 4.4环境搭建——Android SDK下载与安装
  8. ARM装配说明MCR/MRC学习
  9. Deploy Oracle 10.2.0.5 on Red Hat Enterprise Linux 6.4
  10. 猪和python(pig and python)