动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.前车之覆,后车之鉴 --开源项目经.
.用Spring framework实现定时器功.
.java线程简介(线程的生命).
.update和saveOrUpdate项目思路详.
.预装载以及JavaScript Image()对.
.Eclipse快速上手指南之使用CVS(.
.用PMD自动执行Java代码静态分析.
.DOM4J 使用简介(转).
.使用圆括号.
.Java调试器--jdb.exe.
.Java编程:实例分析J2ME网络编程.
.初学Java写的第一个多线程程序.
.用Java在Palm和Pocket PC上编程.
.用于正则表达式的抽象JavaAPI.
.使用JRockit 5.0运行BEA&nb.
.Eclipse插件开发之EasyExplorer.
.Java网络服务器编程(NIO版).
.为WebLogic 8.1 Platf.
.Java事件处理与发送.
.专稿:实战EJB之四 开发实体CMP(.

提高Java程序内存效率

发表日期:2008-1-5 |



  我们都知道Java程序之所以被广大程序员青睐,很大的一个原因是因为Java有GC(垃圾收集),不用程序员花很大的精力来解决内存释放和泄漏问题。而这些问题总是C/C++程序员需要花很大精力来认真地面对的。
  
  问题总是双面的,GC给我们带来了很大的快乐,释放了程序员很多的精力和时间,但是在某些时候也会给我们带来一些小小的麻烦。Java里的Object并非交给GC去释放就可高枕无忧了,下面从JDK1.4的Demo中Java2D的Memory Monitor说起。
  
  先看看Memory Monitor单独运行的效果。
  
  可以看到因为有个While循环,GC释放内存有一定的时间,在这个时间中间,内存消耗的很厉害。峰值达到923K。程序代码的如下:
  
  //SysGcMain.java Created on 9:15:59
  
  package com.gx2.system;
  
  /**
  
  * @author Frank Gao @version 1.00
  
  * Copy right by GX2 Studio 2003
  
  * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
  
  *
  
  * Redistribution and use in source……以后省略
  
  */
  
  /*
  
  * @(#)MemoryMonitor.java  1.32 03/01/23
  
  */
  
  import java.awt.*;
  
  import java.awt.event.*;
  
  import java.awt.image.BufferedImage;
  
  import java.awt.geom.Line2D;
  
  import java.awt.geom.Rectangle2D;
  
  import java.util.Date;
  
  import javax.swing.*;
  
  import javax.swing.border.EtchedBorder;
  
  import javax.swing.border.TitledBorder;
  
  /**
  
  * Tracks Memory allocated & used, displayed in graph form.
  
  */
  
  public class SysGcMain extends JPanel {
  
  static JCheckBox dateStampCB = new JCheckBox("Output Date Stamp");
  
  public Surface surf;
  
  JPanel controls;
  
  boolean doControls;
  
  JTextField tf;
  
  public SysGcMain() {
  
  setLayout(new BorderLayout());
  
  setBorder(new TitledBorder(new EtchedBorder(), "Memory Monitor"));
  
  add(surf = new Surface());
  
  controls = new JPanel();
  
  controls.setPreferredSize(new Dimension(135,80));
  
  Font font = new Font("serif", Font.PLAIN, 10);
  
  JLabel label = new JLabel("Sample Rate");
  
  label.setFont(font);
  
  label.setForeground(Color.black);
  
  controls.add(label);
  
  tf = new JTextField("1000");
  
  tf.setPreferredSize(new Dimension(45,20));
  
  controls.add(tf);
  
  controls.add(label = new JLabel("ms"));
  
  label.setFont(font);
  
  label.setForeground(Color.black);
  
  controls.add(dateStampCB);
  
  dateStampCB.setFont(font);
  
  addMouseListener(new MouseAdapter() {
  
  public void mouseClicked(MouseEvent e) {
  
  removeAll();
  
  if ((doControls = !doControls)) {
  
  surf.stop();
  
  add(controls);
  
  } else {
  
  try {
  
  surf.sleepAmount = Long.parseLong(tf.getText().trim());
  
  } catch (Exception ex) {}
  
  surf.start();
  
  add(surf);
  
  }
  
  validate();
  
  repaint();
  
  }
  
  });
  
  }
  
  public class Surface extends JPanel implements Runnable {
  
  public Thread thread;
  
  public long sleepAmount = 1000;
  
  private int w, h;
  
  private BufferedImage bimg;
  
  private Graphics2D big;
  
  private Font font = new Font("Times New Roman", Font.PLAIN, 11);
  
  private Runtime r = Runtime.getRuntime();
  
  private int columnInc;
  
  private int pts[];
  
  private int ptNum;
  
  private int ascent, descent;
  
  private float freeMemory, totalMemory;
  
  private Rectangle graphOutlineRect = new Rectangle();
  
  private Rectangle2D mfRect = new Rectangle2D.Float();
  
  private Rectangle2D muRect = new Rectangle2D.Float();
  
  private Line2D graphLine = new Line2D.Float();
  
  private Color graphColor = new Color(46, 139, 87);
  
  private Color mfColor = new Color(0, 100, 0);
  
  private String usedStr;
  
  public Surface() {
  
  setBackground(Color.black);
  
  addMouseListener(new MouseAdapter() {
  
  public void mouseClicked(MouseEvent e) {
  
  if (thread == null) start(); else stop();
  
  }
  
  });
  
  }
  
  public Dimension getMinimumSize() {
  
  return getPreferredSize();
  
  }
  
  public Dimension getMaximumSize() {
  
  return getPreferredSize();
  
  }
  
  public Dimension getPreferredSize() {
  
  return new Dimension(135,80);
  
  }
  
  public void paint(Graphics g) {
  
  if (big == null) {
  
  return;
  
  }
  
  big.setBackground(getBackground());
  
  big.clearRect(0,0,w,h);
  
  float freeMemory = (float) r.freeMemory();
  
  float totalMemory = (float) r.totalMemory();
  
  // .. Draw allocated and used strings ..
  
  big.setColor(Color.green);
  
  big.drawString(String.valueOf((int) totalMemory/1024) + "K allocated", 4.0f, (float) ascent+0.5f);
  
  usedStr = String.valueOf(((int) (totalMemory - freeMemory))/1024)
  
  + "K used";
  
  big.drawString(usedStr, 4, h-descent);
  
  // Calculate remaining size
  
  float ssH = ascent + descent;
  
  float remainingHeight = (float) (h - (ssH*2) - 0.5f);
  
  float blockHeight = remainingHeight/10;
  
  float blockWidth = 20.0f;
  
  float remainingWidth = (float) (w - blockWidth - 10);
  
  // .. Memory Free ..
  
  big.setColor(mfColor);
  
  int MemUsage = (int) ((freeMemory / totalMemory) * 10);
  
  int i = 0;
  
  for ( ; i < MemUsage ; i++) {
  
  mfRect.setRect(5,(float) ssH+i*blockHeight,
  
  blockWidth,(float) blockHeight-1);
  
  big.fill(mfRect);
  
  }
  
  // .. Memory Used ..
  
  big.setColor(Color.green);
  
  for ( ; i < 10; i++) {
  
  muRect.setRect(5,(float) ssH+i*blockHeight,
  
  blockWidth,(float) blockHeight-1);
  
  big.fill(muRect);
  
  }
  
  // .. Draw History Graph ..
  
  big.setColor(graphColor);
  
  int graphX = 30;
  
  int graphY = (int) ssH;
  
  int graphW = w - graphX - 5;
  
  int graphH = (int) remainingHeight;
  
  graphOutlineRect.setRect(graphX, graphY, graphW, graphH);
  
  big.draw(graphOutlineRect);
  
  int graphRow = graphH/10;
  
  // .. Draw row ..
  
  for (int j = graphY; j <= graphH+graphY; j += graphRow) {
  
  graphLine.setLine(graphX,j,graphX+graphW,j);
  
  big.draw(graphLine);
  
  }
  
  // .. Draw animated column movement ..
  
  int graphColumn = graphW/15;
  
  if (columnInc == 0) {
  
  columnInc = graphColumn;
  
  }
  
  for (int j = graphX+columnInc; j < graphW+graphX; j+=graphColumn) {
  
  graphLine.setLine(j,graphY,j,graphY+graphH);
  
  big.draw(graphLine);
  
  }
  
  --columnInc;
  
  if (pts == null) {
  
  pts = new int[graphW];
  
  ptNum = 0;
  
  } else if (pts.length != graphW) {
  
  int tmp[] = null;
  
  if (ptNum < graphW) {
  
  tmp = new int[pt
上一篇:用状态栏提示改善JavaGUI 人气:603
下一篇:java经典问题大集合 人气:647
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-29 oblog v4.6 build 20080827
2008-8-29 ASBLOG v2.5 bulid 080828
2008-8-29 时尚DJ舞曲小偷 v3.1
2008-8-29 仿代码信息分类系统 v1.0 Beta3
2008-8-29 浮梦呓语-个人网站 完整版
2008-8-29 多用户QQ空间Flash播放器
2008-8-29 美思卡企业网站管理系统高级版
2008-8-28 LDV个人相册系统 v1.6.1
2008-8-28 讯时网站管理系统CMS v3.5
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵