利用java虚拟机的工具jmap分析java内存状况

有时候碰到性能问题,好比一个java application出现out of memory,出现内存泄漏的状况,再去修改bug可能会变得异常复杂,利用工具去分析整个java application 内存占用状况,而后再去走查代码。java

首先先看一下,java内存分配的基本模型,因为JVM内存划分比较复杂,这里只是简单的说一下java内存划分app

java 堆(heap):dom

Java 堆是被全部线程共享的一块内存区域,在虚拟机启动时建立。此内存区域的工具

惟一目的就是存放对象实例,几乎全部的对象实例都在这里分配内存。性能

Java 堆是垃圾收集器管理的主要区域,所以不少时候也被称作“GC 堆”spa

因此Java 堆中还能够细分为:新生代和老年代;线程

新生代:全部新生成的对象首先都是放在年轻代的。年轻代的目标就是尽量快速的收集掉那些生命周期短的对象。orm

老年代(old Generation):在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。所以,能够认为年老代中存放的都是一些生命周期较长的对象对象

持久代(Prem Generation):用于存放静态文件,现在Java类、方法等。持久代对垃圾回收没有显著影响,可是有些应用可能动态生成或者调用一些class,例如Hibernate等,在这种时候须要设置一个比较大的持久代空间来存放这些运行过程当中新增的类。持久代大小经过-XX:MaxPermSize=<N>进行设置。blog

再细致一点的有Eden 空间、From Survivor 空间、To Survivor 空间等。若是从内存分配

的角度看,线程共享的Java 堆中可能划分出多个线程私有的分配缓冲区(Thread Local

Allocation Buffer,TLAB)。不过,不管如何划分,都与存放内容无关,不管哪一个区域,

存储的都仍然是对象实例,进一步划分的目的是为了更好地回收内存,或者更快地分配内存。

 

java 栈区:

JVM中运行的每一个线程都拥有本身的线程栈,线程栈包含了当前线程执行的方法调用相关信息,咱们也把它称做调用栈。随着代码的不断执行,调用栈会不断变化。

通常认为 方法,局部变量,对象的引用 都是存在栈区内的。

java方法区:

方法区(Method Area)与Java 堆同样,是各个线程共享的内存区域,它用于存

储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

不少人称之为永生代(Permanent Generation);

出现out of memory 接着会出现 java heap space,这种状况是堆空间满了,

可能出现的状况,好比一个方法 进栈了,里面有一段逻辑,最多见的就是打个比方

public void method(){

     List<Model> list=...;

  .... 执行代码的逻辑

 }

这个list 里面有N多对象,可是执行下面的逻辑时内存溢出,这是由于方法在没有出栈以前,java heap中的对象太多(方法在出栈以后GC 对 没有引用的 对象进行垃圾回收)。

还有 就是有一些全局的变量或者集合 ,或者存在方法区的 内存 没有进行及时清理,致使内存没有释放,这种称之为真泄漏。

2.1 利用jmap 进行内存分析,

jmap -heap pid //打印heap空间的概要,这里能够粗略的检验heap空间的使用状况。

Heap Configuration:指java应用启动时设置的JVM参数。像最大使用内存大小,年老代,年青代,持久代大小等。

Heap Usage:当时的heap实际使用状况。包括新生代、老生代和持久代。

其中新生代包括:Eden区的大小、已使用大小、空闲大小及使用率。Survive区的From和To一样。

有这个能够很简单的查看本进程的内存使用状况。

能够用于分析堆内存分区大小是否合理,新生代和老生代的大小分配是否合适等。

也许进程占用的总内存比较多,但咱们在这里能够看到真正用到的并无多少,不少都是"Free"。内存使用的堆积大多在老年代,内存池露始于此,因此要格外关心“Old Generation”。

jmap -histo PID //这里会生成一个类的统计报表,此表很是简单,如显示什么类有多少个实例,共占了多少字节等。

2.2  利用jmap 生成dump 文件,而后再利用mat工具进行分析。

jmap -dump:live,format=b,file=‘文件名 ’2657 //2657 是进程的PID 号

生成转储文件以后,file -open(该转储文件)

 

上面的饼状图显示了内存分配的比例,经过dominator_tree能够看到详细信息。

相关文章
相关标签/搜索