课程分类

课程介绍
课程目录
用户评论
课程介绍
课程目录
用户评论

你将获得

  • 掌握某些知识点
  • 学会某些技巧(或思路)

教学服务

  • icon

    1v1专属答疑服务

  • icon

    BAT专家面试辅导

讲师介绍

  • 赵强老师,清华大学软件工程专业毕业。京东大学大数据学院院长,Oracle(中国)高级技术顾问。精通大数据、Oracle数据库、NoSQL数据库,以及中间件技术

  • 课程详情


    在故障定位(尤其是out of memory)和性能分析的时候,经常会用到一些文件来帮助我们排除代码问题。这些文件记录了JVM运行期间的内存占用、线程执行等情况,这就是我们常说的dump文件。常用的有heap dump和thread dump(也叫javacore,或java dump)。我们可以这么理解:heap dump记录内存信息的,thread dump是记录CPU信息的。

     

    Heap Dump是什么?
    Heap Dump也叫堆转储文件,是一个Java进程在某个时间点上的内存快照。Heap Dump是有着多种类型的。不过总体上heap dump在触发快照的时候都保存了java对象和类的信息。通常在写heap dump文件前会触发一次FullGC,所以heap dump文件中保存的是FullGC后留下的对象信息。
     

    我们可以通过Heap Dump做哪些事情?
    一般在Heap Dump文件中可以获取到(这仍然取决于heap dump文件的类型)如下信息:

    • 对象信息:类、成员变量、直接量以及引用值;

    • 类信息:类加载器、名称、超类、静态成员;

    • Garbage Collections Roots:JVM可达的对象;

    • 线程栈以及本地变量:获取快照时的线程栈信息,以及局部变量的详细信息。
       

    也就是说我们可以对上面这些内容进行分析。通常可以基于Heap Dump分析如下类型的问题:

    • 找出内存泄漏的原因;

    • 找出重复引用的jar或类;

    • 分析集合的使用;

    • 分析类加载器。