zoukankan      html  css  js  c++  java
  • Java内存分析简单介绍

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11904422.html

    Java内存分析简单介绍:

    1. 
    # 设置内存溢出时自动生成堆内存快照信息
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:loggc.hprof -XX:+PrintGCDetails -Xloggc:D:loggc.log 
    
    2. 使用Jmap(Java Memory Map) 生成 堆内存信息文件 HeapDump, 打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节
    
    常见内存错误:
    outOfMemoryError 年代内存不足。
    outOfMemoryError:PermGen Space 永久代内存不足。
    outOfMemoryError:GC overhead limit exceed 垃圾回收时间占用系统运行时间的98%或以上。
    
    
     jmap -dump:live,format=b,file=d:/log/heapdump.hprof 1000    可以将1000进程的内存heap输出出来到d:logheapdump.hprof文件里;
    
    
    用 MAT 分析:
    
        Histogram可以列出内存中的对象,对象的个数以及大小。
        Dominator Tree可以列出那个线程,以及线程下面的那些对象占用的空间。
        Top consumers通过图形列出最大的object。
        Leak Suspects通过MA自动分析泄漏的原因。
    
    Histogram:
        Class Name : 类名称,java类名
        Objects : 类的对象的数量,这个对象被创建了多少个
        Shallow Heap :一个对象内存的消耗大小,不包含对其他对象的引用
        Retained Heap :是shallow Heap的总和,也就是该对象被GC之后所能回收到内存的总和
    
            Shallow Size
            对象自身占用的内存大小,不包括它引用的对象。
            针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。当然这里面还会包括一些java语言特性的数据存储单元。
            针对数组类型的对象,它的大小是数组元素对象的大小总和。
    
            Retained Size
            Retained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A->B->C, C就是间接引用)
            换句话说,Retained Size就是当前对象被GC后,从Heap上总共能释放掉的内存。
            不过,释放的时候还要排除被GC Roots直接或间接引用的对象。他们暂时不会被被当做Garbage
    
            GC ROOTS 
            |
            |--ObjectA
            |--ObjectB
            |----|--ObjectC
            |----|--ObjectD
            |--ObjectD
            
            可以看出, GC ROOTS直接引用了 A, B, D 三个对象:
            A : Retained Size(A) = Shallow Size(A)
            B : Retained Size(B) = Shallow Size(B) + Shallow Size(C) (此处因为D直接被GCROOTS引用, 所以这里不包含D)
            D : Retained Size(D) = Shallow Size(D)
    
            如果D不被GC ROOTS直接引用如下:
            GC ROOTS 
            |
            |--ObjectA
            |--ObjectB
            |----|--ObjectC
            |----|--ObjectD
            A : Retained Size(A) = Shallow Size(A)
            B : Retained Size(B) = Shallow Size(B) + Shallow Size(C) + Shallow Size(D)
            D : Retained Size(D) = Shallow Size(D)
  • 相关阅读:
    linux离线安装nodejs ,配置环境,离线配置全局包
    前端项目路由使用browserHistory不能刷新,页面刷新错误,
    手机uc浏览器打不开本地网页,网页一片空白
    display:flex兼容性,
    react生产环境样式丢失问题 在浏览器中看到标签有类名,但没有样式
    redux使用redux-thunk中间件处理异步状态管理请求
    配置Redux DevTools
    flex-grow属性在文本过长时会超出父窗体长度
    react配置代理,解决跨域
    react修改状态
  • 原文地址:https://www.cnblogs.com/fanerwei222/p/11904422.html
Copyright © 2011-2022 走看看