zoukankan      html  css  js  c++  java
  • 小工具:内存监视器(SystemMonitor)

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

      加速球的替代方案比比皆是,如Windows自带的任务管理器,窗口底部能看到内存使用率,手动杀死进程能释放资源。笔者是个追求视觉效果的人,就觉得任务管理器的显示效果太直白,缺乏美感,于是萌生了自己动手写个“内存监视器”的想法。

      内存监视器,顾名思义,就是监视内存的使用情况,涉及到读取内存信息和显示汇总结果两方面内容。读取内存信息可以借助SIGAR库,显示汇总结果有JFreeChart。

      SIGAR,即System Information Gatherer And Reporter,跨平台,支持多种语言,提供轻便的接口来收集CPU,内存,交换区,账户,文件系统,网络等信息。

      JFreeChart用来创建高质量图表,支持2D或3D的扇形图,柱形图,折线图等图表类型,还能以PNG,JPEG,PDF,SVG的格式导出图表。

      因为可以在官方站点找到帮助文档,所以此处不再冗述其使用方法。

      内存监视器的设计思想是每秒收集一次内存使用率,汇总起来绘制折线图,详细的源码如下:

     1 package org.warnier.zhang.systemmonitor;
     2 
     3 import org.jfree.chart.ChartFactory;
     4 import org.jfree.chart.ChartPanel;
     5 import org.jfree.chart.JFreeChart;
     6 import org.jfree.chart.StandardChartTheme;
     7 import org.jfree.data.category.DefaultCategoryDataset;
     8 import org.jfree.ui.ApplicationFrame;
     9 import org.warnier.zhang.systemmonitor.util.SystemMonitor;
    10 
    11 import javax.swing.*;
    12 import java.awt.*;
    13 import java.text.SimpleDateFormat;
    14 import java.util.*;
    15 import java.util.List;
    16 import java.util.Timer;
    17 
    18 /**
    19  * Startpoint for whole project.
    20  */
    21 public class Console extends ApplicationFrame {
    22     private static final long delayMillis = 1000;
    23     private List<Map<String, Double>> dataSet = new ArrayList<>(8);
    24 
    25     public Console(String title) {
    26         super(title);
    27         ChartFactory.setChartTheme(getTheme());
    28 
    29         //Gather system info.
    30         gatherSystemInfo();
    31     }
    32 
    33     //Enable zh_CN.
    34     private StandardChartTheme getTheme() {
    35         StandardChartTheme theme = new StandardChartTheme("CN");
    36         Font font = new Font("宋体", Font.PLAIN, 12);
    37         theme.setExtraLargeFont(new Font("宋体", Font.BOLD, 18));
    38         theme.setRegularFont(font);
    39         theme.setLargeFont(font);
    40         return theme;
    41     }
    42 
    43     private void gatherSystemInfo() {
    44         final SystemMonitor monitor = new SystemMonitor();
    45         new Timer().schedule(new TimerTask() {
    46             @Override
    47             public void run() {
    48                 Map<String, Double> dataItem = new HashMap<>(1);
    49                 dataItem.put(SimpleDateFormat.getTimeInstance().format(new Date()), monitor.getMemory());
    50                 dataSet.add(dataItem);
    51                 //Retain 8 latest items.
    52                 if (dataSet.size() > 8) {
    53                     dataSet.remove(0);
    54                 }
    55                 invalidate(getChart());
    56             }
    57         }, 0, delayMillis);
    58     }
    59 
    60     private void invalidate(JFreeChart chart) {
    61         ChartPanel chartPanel = new ChartPanel(chart);
    62         // ? Can't use zh_CN.
    63         //chartPanel.setFont(new Font("MS Song", Font.PLAIN, 12));
    64         setContentPane(chartPanel);
    65         ((JPanel)getContentPane()).updateUI();
    66     }
    67 
    68     private JFreeChart getChart() {
    69         JFreeChart chart = ChartFactory.createLineChart("内存监视器",
    70                 null,
    71                 null,
    72                 wrapDataSet(dataSet));
    73         return chart;
    74     }
    75 
    76     private DefaultCategoryDataset wrapDataSet(List<Map<String, Double>> rawData) {
    77         DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
    78         for (int i = 0; i < rawData.size(); i++) {
    79             for (Map.Entry<String, Double> entry : rawData.get(i).entrySet()) {
    80                 dataSet.addValue(entry.getValue(), "内存占用率", entry.getKey());
    81             }
    82         }
    83         return dataSet;
    84     }
    85 
    86     public static void main(String[] args) {
    87         Console console = new Console("System Monitor");
    88         console.setSize(680, 420);
    89         console.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    90         console.setVisible(true);
    91     }
    92 }

      效果截图

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

  • 相关阅读:
    ios 工具大全,最全框架
    获取APP的启动图 -Launch Image
    OCP-052考试题库汇总(3)-CUUG内部解答版
    OCP-052考题汇总(2)-CUUG内部解答版
    OCP-052考题汇总(1)-CUUG内部解答版
    【第60题】【062题库】2019年OCP认证062考试新题
    【第59题】【062题库】2019年OCP认证062考试新题
    【第58题】【062题库】2019年OCP认证062考试新题
    【第57题】【062题库】2019年OCP认证062考试新题
    【第56题】【062题库】2019年OCP认证062考试新题
  • 原文地址:https://www.cnblogs.com/warnier-zhang/p/5350484.html
Copyright © 2011-2022 走看看