一 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

循序渐进 Jprofiler的更多相关文章

  1. 部署JProfiler监控tomcat

    下载JProfiler包 wget http://download-keycdn.ej-technologies.com/jprofiler/jprofiler_linux_9_2.rpm 安装JPr ...

  2. 循序渐进做项目系列(4)迷你QQ篇(2)——视频聊天!(附源码)

    一·效果展示 源码派送:MiniQQ1.1 文字聊天的实现参见:循序渐进做项目系列(3):迷你QQ篇(1)——实现客户端互相聊天 二·服务端设计 对于实现视频聊天而言,服务端最核心的工作就是要构造多媒 ...

  3. 循序渐进做项目系列(3):迷你QQ篇(1)——实现客户端互相聊天

    <循序渐进做项目系列迷你QQ篇>将陆续介绍客户端聊天,文件传输,加好友,群聊,包括语音聊天,视频聊天,远程桌面等等需求如何实现,感兴趣的朋友可以持续关注.考虑到某些需求较为复杂,本系列采用 ...

  4. javascriptの循序渐进(一)

    javascriptの循序渐进系列为<javascript高级程序设计>的读书笔记,记录了看书过程中觉得重点的地方和一些总结,为学习javascript打好基础. ------------ ...

  5. Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java微基准测试

    本文是本人前一段时间做一个简单Java监控工具调研总结,主要包括VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,以及对Java微基准测试的简单介绍, ...

  6. 转载:JProfiler远程监控LINUX上的Tomcat过程细讲

    来源于xuwanbest的博客   所谓"工欲善其事,必先利其器",好的工具确能起到事半工倍的作用.我用到的最多的就两个JConsole 和JProfiler .JConsole监 ...

  7. 循序渐进做项目系列(2):最简单的C/S程序——消息异步调用与消息同步调用

    上篇博客 循序渐进做项目系列(1):最简单的C/S程序——让服务器来做加法 实现了一个最简单的C/S程序,即让服务器来做加法.当时为了通俗易懂采用了消息异步调用的方式.今天我们要采用消息同步调用的方式 ...

  8. 循序渐进做项目系列(1):最简单的C/S程序——让服务器来做加法

    (本文是专门针对未接触过C/S开发的初学者而写的,C/S开发高手请自动忽略啊~~) 还在写“Hello world!”式的单机程序吗?还在各种拖控件吗?是否自己都觉得有点low呢?来个质的飞跃吧!看看 ...

  9. 从C#到Objective-C,循序渐进学习苹果开发(4)--代码块(block)和错误异常处理的理解

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从 ...

随机推荐

  1. stack overflow错误分析

    stack overflow(堆栈溢出)就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,结果覆盖了老的堆栈数据. 或者解释为 在长字符串中嵌入一段代码,并将过程的返回地址 ...

  2. Javascript中的循环变量声明,到底应该放在哪儿?

    相信很多Javascript开发者都在声明循环变量时犹豫过var i到底应该放在哪里:放在不同的位置会对程序的运行产生怎样的影响?哪一种方式符合Javascript的语言规范?哪一种方式和ecma标准 ...

  3. (十七)迭代器模式详解(foreach的精髓)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 各位好,很久没以LZ的身份和 ...

  4. 用程序集编写clr表值函数:把正则表达式引入数据库中

    正则表达式非常好,但在数据库中就是没有,但可以通过程序集方式扩展 先编写一个dll,标量函数很好写,表值函数麻烦一点 下面是C#代码 using System; using System.Data; ...

  5. 半平面交模板(BZOJ1007)

    #include<cstdio> #include<algorithm> #define LDB long double using namespace std; ]; str ...

  6. 安全模式下运行Windows installer并卸载程序

    [安全模式] 打开命令行 执行 REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\MSIServer" ...

  7. jQuery能做些什么

    来源于: Learning jQuery, 4th Edition What jQuery does: 1. Access elements in a document; $('div.content ...

  8. stringBuffer拼接有规律字符串

    1. 拼接结果如下的字符串 1,2,3,4,5,6,7,8,9,10,11,12,12,12,12,34,234,2134,1234,1324,1234,123 2. 以前是这样想的,但是从效率,速度 ...

  9. [转]Java Web基础——Action+Service +Dao三层的功能划分

    原文地址:http://blog.csdn.net/inter_peng/article/details/41021727 参考来源:http://www.xuebuyuan.com/2153333. ...

  10. [转]javascript Date format(js日期格式化)

    方法一:这个很不错,好像是 csdn 的 Meizz 写的: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q)  ...