请问,如果我有如下类:
public class ClassOne{
   private List list=new Vector();
   public void addToList(Object obj){
      for(int i=1;i<=10000;i++){
          list.add(object);
      }
   }
   public void print(){
               for(int i=0;i<list.size;i++)}
                       list.get(i);
                }
   }
}
  现我要在客户端调用此类,并且,先ADD,再pri9nt,想查看在这个运行过程中,这个程序占用多少内存,CPU占多少?如何查看?  还有:
  1)如何查看一个JAVA的WEB应用启动后,一直运行占多少内存和CPU?
  2)如何查看类似于上面的小程序运行完后,是否还占着内存不放?CPU不放?能回答者,谢谢!高分!
以上实现,如有代码提供代码,或现有什么工具也可提供下名称!

解决方案 »

  1.   

    如果是web应用,有一个probe的开源项目,把这个项目放到webapp下,就可以查看相应的东东了。在浏览器中看哈。
      

  2.   

    运行时加个参数,在 Linux 下可以用 ps 命令找到:java -Dmodule=application_name xxx.xxx.xx.Xxxxps xo pid,%cpu,vsz,rsz,command | grep module=application_name | grep -v grep | | awk '{print $1","$2","$3/1024","$4/1024}')
      

  3.   

    但有没有办法查看,如:我增加一个功能,然后看这个功能各切面代码(如services)占多少内存和CPU这样的?而且希望在运行时?
      如,我现查询某个表占用多少?我插入某个表的记录占用多少?
      

  4.   

    赞3楼的命令行
    我本人用过jprofile,还不错。希望lz可以试试。
      

  5.   

    jconsole ,这个可以看看,google,baidu下一大堆
      

  6.   

    如果不知道怎么下载jprofile,直接用NetBeans,SUN的Java IDE,里面有Jprofile,SUN网站有怎么使用,可以看每个Method的执行时间,内存,CPU占用等很多信息
      

  7.   

    用VisualVM啊。。这个能满足你的需求。。jdk1.6.0_12\bin\jvisualvm.exe是jdk自带的。
      

  8.   

    占用内存可以用Runtime.getRuntime().totalMemory() - freeMemory()来得到占用CPU可以用:
    RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
    OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean();
    Method m = os.getClass().getDeclaredMethod("getProcessCpuTime", new Class[0]);
    m.setAccessible(true);
    Long o = (Long)m.invoke(os, new Object[0]);得到,但是这个是返回累计使用时间,不是百分比。
    需要先减上一次累计值再除以os.getAvailableProcessors();来得到百分比
    但是这些都是获取当前JVM的信息,如果是需要得到远程JVM则需要利用
    sun.tools.attach.WindowsAttachProvider等连接JVM再执行必要方法
      

  9.   

    先执行这个命令  jmap -dump:live,format=b,file=heap.bin 8436(PID)
    heap.bin是生成的文件,
    再用 jvisualvm.exe 工具,对生成的文件进行分析