• 循序渐进 Jprofiler


    一 Jprofiler

    1 什么是Jprofiler

      JProfiler是一个全功能的Java剖析工具(profiler),专用于分析J2SE和J2EE应用程式。它把CPU、线程和内存的剖析组合在一个强大的应用中。JProfiler的GUI可以更方便地找到性能瓶颈、抓住内存泄漏(memory leaks),并解决多线程的问题。例如分析哪个对象占用的内存比较多;哪个方法占用较大的CPU资源等;

      它能通过评估CPU、内存以及线程来避免内存漏失,是一个性能监测工具。

    2 安装 Jprofiler

    1) 下载并安装 Jprofiler

     可以从官网下载最新版本的Jprofiler, 适用版本可以有10天的试用期(但是一股神秘的力量可以让试用无线延长,原因你懂的)

    http://www.ej-technologies.com/products/jprofiler/overview.html

     

    2) 按照安装提示与开发工具集成

      假设是用Eclipse开发的,打开Jprofiler,点击Session→IDE Integrations,选中你的Eclipse版本,点击OK然后按提示操作即可。操作成功后,我们可以在Eclipse看到JProfiler扩展插件如下:

    3)测试例子

    People.java

    package test;
    
    public class People
    {
        private String name;
    
        public String getName()
        {
            return name;
        }
    
        public void setName(String name)
        {
            this.name = name;
        }
        
    }

    TestThread.java

    package test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class TestThread extends Thread
    {
        private int i = 0;
         
        public void run() {
                List list = new ArrayList();
                
                for(double j=0;j< 100000000000l;j++){
                    People people = new People();
                    people.setName("name-"+j);
                    list.add(people);
                    i++;
                    
                    System.out.println( "线程["+Thread.currentThread().getName()   +"]"+ i);
                    try {
                        System.out.println("线程"+Thread.currentThread().getName()+"进入睡眠状态");
                        Thread.currentThread().sleep(1000);
                    } catch (InterruptedException e) {
                       e.printStackTrace();
                    }
                    System.out.println("线程"+Thread.currentThread().getName()+"睡眠结束.list.size=>"+list.size());
                }     
        }
    }

    TestJProfiler.java 这是测试代码入口,运行这个测试类。

    package test;
    
    public class TestJProfiler
    {
    
        public static void main(String[] args)
        {
            TestThread thread1 = new TestThread();
            thread1.start();
        }
    
    }

    4) 启动Jprofiler捕获正在运行的J2SE程序。

       打开Jprofiler选择 session -> new session .刚才在Eclipse中运行TestJProfiler,选中进程名字为test.TestJProfiler的记录,并点击Open。(小技巧:可以点"Show Services"进行手动刷新,JProfiler会自动帮你捕获运行中的java程序)。

    5)查看Jprofiler的监控页面

        完成上面的操作后,打开Jprofiler的监控页面。Jprofiler -> Live memory -> All Objects,把相关的查看级别选为Packages.

      通过这个极端的代码,可以看到当前运行的j2se程序中,在test包下有1个 TestThread对象,653个People对象。通过JProfiler的监控屏,可以很容易的看到哪些代码写的占用了系统宝贵的资源。

      实验成功,以后再也不怕项目抛出 OutOfMemory异常了,以前每次遇到项目奔溃时,我的内心都是.............

     Jprofiler的注册码(在学习阶段可以"蹭"着用,但有能力还是花钱支持下软件作者)

    L-Larry_Lau@163.com#23874-hrwpdp1sh1wrn#0620
    L-Larry_Lau@163.com#36573-fdkscp15axjj6#25257
    L-Larry_Lau@163.com#5481-ucjn4a16rvd98#6038
    L-Larry_Lau@163.com#99016-hli5ay1ylizjj#27215
    L-Larry_Lau@163.com#40775-3wle0g1uin5c1#0674

    二 Java堆:Shallow Size和Retained Size

      Shallow size 是对象本身占用内存的大小,不包含其引用的对象。常规对象(非数组)的Shallow size有其成员变量的数量和类型决定。数组的shallow size有数组元素的类型(对象类型、基本类型)和数组长度决定。

      Retained size是该对象自己的shallow size,加上从该对象能直接或间接访问到对象的shallow size之和。换句话说,retained size是该对象被GC之后所能回收到内存的总和

    其他资料:

    http://blog.csdn.net/chendc201/article/details/22897999

    http://blog.csdn.net/djy1135/article/details/2304465

    http://www.cnblogs.com/langtianya/p/3811556.html

  • 相关阅读:
    [rabbitmq] python版本(六)远程过程调用
    [rabbitmq] python版本(五) 主题交换机
    物体运动学习笔记(一)
    基于TimeLine编辑角色动画(二)
    基于TimeLine编辑角色动画(一)
    SQlite常用操作封装
    unity三种资源加载方式Resources,AssetBundle,WebRequset的同步异步加载
    场景同步异步加载
    XML保存账号密码
    unity EditorWindow 绘制时间刻度
  • 原文地址:https://www.cnblogs.com/wangshuo1/p/5710333.html
Copyright © 2020-2023  润新知