小工具:内存监视器(SystemMonitor)
卸了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。
小工具:内存监视器(SystemMonitor)的更多相关文章
- [Android Memory] Android性能测试小工具Emmagee
转载:http://blog.csdn.net/anlegor/article/details/22895993 Emmagee是网易杭州QA团队开发的用于测试指定android应用性能的小工具.该工 ...
- linux运维自动化shell脚本小工具
linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU # ...
- Windows下好用到必须开机自启的小工具
折腾过linux,黑苹果,最后还是回到了盖茨大叔的windows.得出的结论是,日常使用的话,折腾Linux还不如把精力去拿去折腾windows.分享下折腾的成果,介绍下一些很不错的小工具. ...
- C#照片批量压缩小工具
做了一个照片批量压缩工具,其实核心代码几分钟就完成了,但整个小工具做下来还是花了一天的时间.中间遇到了大堆问题,并寻求最好的解决方案予以解决.现在就分享一下这个看似简单的小工具所使用的技术. 软件界面 ...
- 腾讯优测干货精选| 安卓开发新技能Get -常用必备小工具汇总
文/腾讯公司 陈江峰 优测小优有话说: 移动研发及测试干货哪里找?腾讯优测-优社区你值得拥有~ 开发同学们都知道,安卓开发路上会碰到很多艰难险阻,一不小心就被KO.这时候,没有新技能傍身怎么行?今天我 ...
- C#使用 SQLite 数据库 开发的配置过程及基本操作类,实例程序:工商银行贵金属行情查看小工具
--首发于博客园, 转载请保留此链接 博客原文地址 本文运行环境: Win7 X64, VS2010 1. SQLite 的优点: SQLite 是一款轻型数据库,开发包只有十几M, 相对于 MSS ...
- 2014年Windows平台软件推荐:神器小工具(骨灰级
原文 http://www.wtoutiao.com/a/120621.html 底层工具 “If you know how to use Process Monitor competently, ...
- 【游戏开发】Excel表格批量转换成CSV的小工具
一.前言 在工作的过程中,我们有时可能会面临将Excel表格转换成CSV格式文件的需求.这尤其在游戏开发中体现的最为明显,策划的数据文档大多是一些Excel表格,且不说这些表格在游戏中读取的速度,但就 ...
- Windows平台软件推荐:神器小工具(骨灰级)
底层工具 "If you know how to use Process Monitor competently, people of both sexes will immediately ...
随机推荐
- xp硬盘安装Fedora14 过程记录及心得体会(fedora14 live版本680M 和fedora14 DVD版本3.2G的选择)
这次电脑奔溃了,奇怪的是直接ghost覆盖c盘竟然不中.之前电脑上硬盘安装的fedora14操作系统,也是双系统.不知道是不是这个问题,记得同学说过,在硬盘装fedora之后,要手动修改c盘隐藏的那个 ...
- .NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0简介
.NET Core 1.0.ASP.NET Core 1.0和EF Core 1.0简介 英文原文:Reintroducing .NET Core 1.0, ASP.NET Core 1.0, and ...
- adapter pattern
对象适配器 9.7 适配器模式总结 适配器模式将现有接口转化为客户类所期望的接口,实现了对现有类的复用,它是一种使用频率非常高的设计模式,在软件开发中得以广泛应用,在Spring等开源框架.驱动程序设 ...
- js你真的了解offsetWidth吗
offsetWidth是什么? 答:它可以获取物体宽度的数值 那么就只是这样吗! html部分 <div id="div1"></div> <styl ...
- Case learning
bad case: <?php foreach($user_detail AS $val) { if(!empty($val->portrait)) { //假设这个循环从来没有到达过 $ ...
- Unity判断网络连接类型
使用NetworkReachability判断手机游戏当前的网络连接类型,是wifi还是234G using UnityEngine; using System.Collections; public ...
- LINK : fatal error LNK1181: 无法打开输入文件“..\..\lib\Release\opencv_ocl249.lib”
最近想要编译什么OpenCV资源.查看源代码调试执行. 按照网上的文章<Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV> 进行配 ...
- 设计模式Adapter模式的五分钟
五分钟一个设计模式.来形容叙述的设计模式的最简单方法.看到许多其他设计模式,请点击五分钟一个设计模式系列 http://blog.csdn.net/daguanjia11/article/catego ...
- Build制作模型
#include <iostream> using namespace std; //不知道为什么事实上非常好解释的东西在网上搞的人晕头转向的,下面是我的理解. //一个基类衍生出很多详细 ...
- DataTable填补了实体类返回泛型集合
坤哥见我昨天找了一段代码,如下面: 略微解释下,这段代码时D层查询结束后,将datatable查询到的结果赋值给实体对象的属性,然后返回实体的过程.坤哥看了之后问我,假设实体有500多个属性,难道也要 ...