原创:忘记理想 2004-11-1 【推荐阅读:关于半途接手项目的对话】
【扩展信息:◆[转]Linux的文件结构 选】我们都知道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) {... 下一页