精华内容
下载资源
问答
  • 生成hprof文件可以在DDMS选中进程点击窗口左上角的"dump hprof file"按钮来直接生成,也可以通过在程序加代码中来生成 代码2: voidgenerateHprof() { String packageName=getApplicationInfo().packageName; ...

    生成hprof文件可以在DDMS选中进程点击窗口左上角的"dump hprof file"按钮来直接生成,也可以通过在程序加代码中来生成

    代码2

        void generateHprof()

        {

                String packageName=getApplicationInfo().packageName;

                String hpFilePath="/data/data/"+packageName+"/input.hprof";

                try {

                      //Debug.dumpHprofData("/sdcard/input.hprof");

                      Debug.dumpHprofData(hpFilePath);

                } catch (IOException e) {

                      // TODO Auto-generated catch block

                      e.printStackTrace();

                }

        }

     

    建议使用代码生成hprof,然后使用批处理hprof文件,然后用Memory Analyzer tool(MAT)进行对多个hprof文件比较分析。

     

    MAT导入.hprof文件以后,MAT会自动解析并生成报告,点击Dominator Tree,并按Package分组,选择自己所定义的Package类,比较各个类在不同时期的Retained Heap,找出可疑类,然后选择该类,点右键,选中show retained Set 项,参看Retained Heap的详细信息,进一步找出嫌疑项。

     

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    一、批处理配置文件

    批处理配置文件config.bat如下:
    rem the following var is for getProcessState.bat
    set rawDatadir=rawData
    set processName=android.process.acore;com.android.systemui
    rem set processShortName=a;b;c
    set processShortName=
    set outRoot=out
    set statFilePrefix=stat
    rem the following var is for getHprof.bat
    set tools=D:\android\tools
    set hpInputFileDir=/sdcard
    set hpInputFile=input.hprof
    set hpRoot=hpTemp
    注1:rawDatadir为“ps -x”提取出来的文件的目录
    注2:processName需要统计RSS的进程的名字,可以同时统计多个,进程名之间用“;”进行分割。
    注3:processShortName需要统计RSS的进程的名字的缩写形式,如果不坐设置或设置为空,这程序会根据processName自动生成。
    注4:outRoot为对进程的RSS进行统计最后的生成文件的存放目录。
    注5:statFilePrefix为对进程的RSS进行统计最后的生成文件的前缀。
    注6:tools为hprof-conv.exe所在的目录。
    注7:hpInputFileDir为手机中我们生成的hprof文件所在的目录。
    注8hpInputFile为手机中我们生成的hprof文件的名字。
    二,需要使用的bat库
    子目录lib用于存放bat库
    需要的bat库:genSerial.batgetSubStr.bat
    关于genSerial.bat请参看《genSerial
    关于getSubStr.bat请参看《getSubStr
    三,在代码中生成Hprof文件:
    在android代码,可以使用如下代码把hprof文件生成到sd卡上。
    Debug.dumpHprofData("/sdcard/input.hprof");
    可以不用sd卡,而将hprof文件直接生成在手机上,但是只能在"/data/data/"+packageName的目录下。
    实例1
        void generateHprof()
        {
    String packageName=getApplicationInfo().packageName;
    String hpFilePath="/data/data/"+packageName+"/input.hprof";
    try {
    //Debug.dumpHprofData("/sdcard/input.hprof");
    Debug.dumpHprofData(hpFilePath);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
        }
     
    四,在电脑上通过批处理取转换Hprof 文件
    如果在程序中用Debug.dumpHprofData("/sdcard/input.hprof")的方式生成了hprof文件
    那么就可以执行文件getHprof .bat来取得Hprof并转化为MemoryAnalyzer的格式。
    getHprof.bat文件如下:
    @echo off
    call config.bat
    if exist %hpInputFile% (
    del %hpInputFile% /q
    )
    adb pull %hpInputFileDir%/%hpInputFile% .
    if not exist %hpInputFile% (
    echo fail to pull %hpInputFile%
    exit 1
    )
    if not exist %hpRoot% (
    md %hpRoot%
    )
    Setlocal enabledelayedexpansion
    set path=%path%;%cd%\lib
    call genSerial
    set serial=!genSerial~result!
    set hpOutFile=%serial%.hprof
    %tools%\hprof-conv.exe %hpInputFile% %hpRoot%\%hpOutFile%
    echo success!
    endlocal
    注1需要在代码中先生成hprof文件,而且config.bat中配置的路径要和在代码中先生成hprof文件的路径一致。
    注2如果需要连续多次以固定的时间提取hprof文件,请参照《Android内存泄露利器(全自动篇)
    注意3:需要把bat库genSerial.bat,getSubStr.bat放在子目录lib中。

    转载于:https://www.cnblogs.com/ccxniit2004/p/3613495.html

    展开全文
  • 系统宕机了,weblogic生成 .phd 和 javacore文件,分别使用 jca457.jar 和 ha456.jar来分析,但是heapdump文件分析时指向的问题和...需要修改startWebLogic.sh文件,宕机时就会自动生成对应的hprof文件 LOG_OPTI

    系统宕机了,weblogic生成 .phd 和  javacore文件,分别使用 jca457.jar  和  ha456.jar来分析,但是heapdump文件分析时指向的问题和内存泄漏点类并不是很方便对应我们的代码,所以想使用mat工具来分析,但是需要生成 hprof文件


    需要修改startWebLogic.sh文件,宕机时就会自动生成对应的hprof文件


    LOG_OPTIONS="-Xloggc:$LOG_PATH/gc.$$.log -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps -XX:HeapDumpPath=$LOG_PATH/heapdump.$$.hprof -XX:ErrorFile=$LOG_PATH/hs_err_pid.$$.log" 







    #!/bin/sh


    # WARNING: This file is created by the Configuration Wizard.
    # Any changes to this script may be lost when adding extensions to this configuration.


    # --- Start Functions ---


    stopAll()
    {
    # We separate the stop commands into a function so we are able to use the trap command in Unix (calling a function) to stop these services
    if [ "X${ALREADY_STOPPED}" != "X" ] ; then
    exit
    fi
    # STOP DERBY (only if we started it)
    if [ "${DERBY_FLAG}" = "true" ] ; then
    echo "Stopping Derby server..."
    ${WL_HOME}/common/derby/bin/stopNetworkServer.sh  >"${DOMAIN_HOME}/derbyShutdown.log" 2>&1 


    echo "Derby server stopped."
    fi


    ALREADY_STOPPED="true"
    }


    classCaching()
    {
    echo "Class caching enabled..."
    JAVA_OPTIONS="${JAVA_OPTIONS} -Dlaunch.main.class=${SERVER_CLASS} -Dlaunch.class.path="${CLASSPATH}" -Dlaunch.complete=weblogic.store.internal.LockManagerImpl -cp ${WL_HOME}/server/lib/pcl2.jar"
    export JAVA_OPTIONS
    SERVER_CLASS="com.oracle.classloader.launch.Launcher"
    }


    # --- End Functions ---


    # *************************************************************************
    # This script is used to start WebLogic Server for this domain.

    # To create your own start script for your domain, you can initialize the
    # environment by calling @USERDOMAINHOME/setDomainEnv.

    # setDomainEnv initializes or calls commEnv to initialize the following variables:

    # BEA_HOME       - The BEA home directory of your WebLogic installation.
    # JAVA_HOME      - Location of the version of Java used to start WebLogic
    #                  Server.
    # JAVA_VENDOR    - Vendor of the JVM (i.e. BEA, HP, IBM, Sun, etc.)
    # PATH           - JDK and WebLogic directories are added to system path.
    # WEBLOGIC_CLASSPATH
    #                - Classpath needed to start WebLogic Server.
    # PATCH_CLASSPATH - Classpath used for patches
    # PATCH_LIBPATH  - Library path used for patches
    # PATCH_PATH     - Path used for patches
    # WEBLOGIC_EXTENSION_DIRS - Extension dirs for WebLogic classpath patch
    # JAVA_VM        - The java arg specifying the VM to run.  (i.e.
    #                - server, -hotspot, etc.)
    # USER_MEM_ARGS  - The variable to override the standard memory arguments
    #                  passed to java.
    # PRODUCTION_MODE - The variable that determines whether Weblogic Server is started in production mode.
    # DERBY_HOME - Derby home directory.
    # DERBY_CLASSPATH
    #                - Classpath needed to start Derby.

    # Other variables used in this script include:
    # SERVER_NAME    - Name of the weblogic server.
    # JAVA_OPTIONS   - Java command-line options for running the server. (These
    #                  will be tagged on to the end of the JAVA_VM and
    #                  MEM_ARGS)
    # CLASS_CACHE    - Enable class caching of system classpath.

    # For additional information, refer to "Managing Server Startup and Shutdown for Oracle WebLogic Server"
    #  (http://download.oracle.com/docs/cd/E17904_01/web.1111/e13708/overview.htm).
    # *************************************************************************


    umask 037




    # Call setDomainEnv here.


    DOMAIN_HOME="/weblogic/domains/m3oapp"


    if [ "X${SERVER_NAME}" = "X" ] ; then
       SERVER_NAME="Admin_app"
    fi
    CURRENTUSER=`whoami`
    if [ "$CURRENTUSER" = "root" ] ; then 
       echo "Don't use root to start weblogic!!!"
       exit 0
    fi
    umask 022




    LOG_PATH="$DOMAIN_HOME/logs" 
    WLS_REDIRECT_LOG="$LOG_PATH/weblogic.${SERVER_NAME}.$$.log" 
    USER_MEM_ARGS="-d64 -Xms5120m -Xmx5120m -Xmn1024m -XX:PermSize=1024m -XX:MaxPermSize=1024m "
    JMX_OPTIONS=" -Dcom.sun.management.jmxremote.port=7401 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" 
    LOG_OPTIONS="-Xloggc:$LOG_PATH/gc.$$.log -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps -XX:HeapDumpPath=$LOG_PATH/heapdump.$$.hprof -XX:ErrorFile=$LOG_PATH/hs_err_pid.$$.log" 
    GC_OPTIONS="-XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60 -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:MaxTenuringThreshold=18  -XX:SurvivorRatio=8 -XX:ParallelGCThreads=16 -XX:+HeapDumpOnOutOfMemoryError" 


    APP_OPTIONS=" -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true " 
    JAVA_OPTIONS=" -d64  $JMX_OPTIONS $LOG_OPTIONS $GC_OPTIONS $APP_OPTIONS -Dweblogic.threadpool.MinPoolSize=100 -Dweblogic.threadpool.MaxPoolSize=1000 -Djavax.management.builder.initial=weblogic.management.jmx.mbeanserver.WLSMBeanServerBuilder -Dweblogic.data.canTransferAnyFile=true -Djava.net.preferIPv4Stack=true  -Dweblogic.wsee.wstx.wsat.deployed=false" 


    . ${DOMAIN_HOME}/bin/setDomainEnv.sh $*


    SAVE_JAVA_OPTIONS="${JAVA_OPTIONS}"


    SAVE_CLASSPATH="${CLASSPATH}"


    # Start Derby


    DERBY_DEBUG_LEVEL="0"


    if [ "${DERBY_FLAG}" = "true" ] ; then
    ${WL_HOME}/common/derby/bin/startNetworkServer.sh  >"${DOMAIN_HOME}/derby.log" 2>&1 


    fi


    JAVA_OPTIONS="${SAVE_JAVA_OPTIONS}"


    SAVE_JAVA_OPTIONS=""


    CLASSPATH="${SAVE_CLASSPATH}"


    SAVE_CLASSPATH=""


    trap 'stopAll' 1 2 3 15




    if [ "${PRODUCTION_MODE}" = "true" ] ; then
    WLS_DISPLAY_MODE="Production"
    else
    WLS_DISPLAY_MODE="Development"
    fi


    if [ "${WLS_USER}" != "" ] ; then
    JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.management.username=${WLS_USER}"
    fi


    if [ "${WLS_PW}" != "" ] ; then
    JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.management.password=${WLS_PW}"
    fi


    if [ "${MEDREC_WEBLOGIC_CLASSPATH}" != "" ] ; then
    if [ "${CLASSPATH}" != "" ] ; then
    CLASSPATH="${CLASSPATH}${CLASSPATHSEP}${MEDREC_WEBLOGIC_CLASSPATH}"
    else
    CLASSPATH="${MEDREC_WEBLOGIC_CLASSPATH}"
    fi
    fi


    echo "."


    echo "."


    echo "JAVA Memory arguments: ${MEM_ARGS}"


    echo "."


    echo "WLS Start Mode=${WLS_DISPLAY_MODE}"


    echo "."


    echo "CLASSPATH=${CLASSPATH}"


    echo "."


    echo "PATH=${PATH}"


    echo "."


    echo "***************************************************"


    echo "*  To start WebLogic Server, use a username and   *"


    echo "*  password assigned to an admin-level user.  For *"


    echo "*  server administration, use the WebLogic Server *"


    echo "*  console at http://hostname:port/console        *"


    echo "***************************************************"


    # CLASS CACHING


    if [ "${CLASS_CACHE}" = "true" ] ; then
    classCaching
    fi


    # START WEBLOGIC


    echo "starting weblogic with Java version:"


    ${JAVA_HOME}/bin/java ${JAVA_VM} -version


    if [ "${WLS_REDIRECT_LOG}" = "" ] ; then
    echo "Starting WLS with line:"
    echo "${JAVA_HOME}/bin/java -Dweblogic.Name=${SERVER_NAME} ${JAVA_VM} ${MEM_ARGS}  -Djava.security.policy=${WL_HOME}/server/lib/weblogic.policy ${JAVA_OPTIONS} ${PROXY_SETTINGS} ${SERVER_CLASS}"
    ${JAVA_HOME}/bin/java -Dweblogic.Name=${SERVER_NAME} ${JAVA_VM} ${MEM_ARGS}  -Djava.security.policy=${WL_HOME}/server/lib/weblogic.policy ${JAVA_OPTIONS} ${PROXY_SETTINGS} ${SERVER_CLASS}
    else
    echo "Redirecting output from WLS window to ${WLS_REDIRECT_LOG}"
    ${JAVA_HOME}/bin/java -Dweblogic.Name=${SERVER_NAME} ${JAVA_VM} ${MEM_ARGS}  -Djava.security.policy=${WL_HOME}/server/lib/weblogic.policy ${JAVA_OPTIONS} ${PROXY_SETTINGS} ${SERVER_CLASS}  >"${WLS_REDIRECT_LOG}" 2>&1 
    fi


    stopAll


    popd


    # Exit this script only if we have been told to exit.


    if [ "${doExitFlag}" = "true" ] ; then
    exit
    fi


    展开全文
  • MAT打开.hprof文件

    千次阅读 2019-02-08 17:20:39
    开始还以为是 MAT 与java的版本不匹配,其实是 android 刚刚生成的 .hprof 文件在这里需要进行转换一下格式。  打开命令行窗口,在android SDK目录,执行以下命令: hprof-conv 1.hprof 2.hprof ...

    Unknown HPROF Version (JAVA PROFILE 1.0.3) (java.io.IOException)解决办法

    开始还以为是 MAT 与java的版本不匹配,其实是 android 刚刚生成的 .hprof 文件在这里需要进行转换一下格式。 

    打开命令行窗口,在android SDK目录,执行以下命令:

    hprof-conv  1.hprof   2.hprof

    phrof-conv.exe 的文件,需要手动添加到sdk的tools文件夹下面(已经添加到环境变量)

    .hprof文件由android-studio生成或者其他方式,然后转换格式后,用MAT工具打开就可看到内存快照,进行内存分析

     

     

    展开全文
  • java服务端程序报错后会生成hprof文件,我们可以通过mat工具MemoryAnalyzer进行分析下载地址:http://www.eclipse.org/mat/downloads.php说明:查看HPROF快照JProfiler能打开用JVM工具(比如jconsole、 jmap或通过-XX...

    java服务端程序报错后会生成hprof文件,我们可以通过mat工具MemoryAnalyzer进行分析

    下载地址:

    http://www.eclipse.org/mat/downloads.php

    3241710445675765b6a17f18f4fb6962.png

    说明:

    查看HPROF快照

    JProfiler能打开用JVM工具(比如jconsole、 jmap或通过-XX:+HeapDumpOnOutOfMemoryError JVM参数触发)创建的HPROF快照文件

    示例:

    #!/bin/bash

    LANG="zh_CN.UTF-8"

    APP_HOME=$(echo `pwd` | sed 's/bin//')

    APPPIDFILE=$APP_HOME/app.pid

    case $1 in

    start)

    echo "Starting server... "

    HEAP_MEMORY=512m

    PERM_MEMORY=64m

    JMX_PORT=8888

    JMX_HOST=1.1.1.1

    JAVA_OPTS="-server -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -XX:+HeapDumpOnOutOfMemoryError -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false "

    shift

    ARGS=($*)

    for ((i=0; i

    case "${ARGS[$i]}" in

    -D*) JAVA_OPTS="${JAVA_OPTS} ${ARGS[$i]}" ;;

    -Heap*) HEAP_MEMORY="${ARGS[$i+1]}" ;;

    -Perm*) PERM_MEMORY="${ARGS[$i+1]}" ;;

    -JmxPort*) JMX_PORT="${ARGS[$i+1]}" ;;

    -JmxHost*) JMX_HOST = "${ARGS[$i+1]}" ;;

    esac

    done

    JAVA_OPTS="${JAVA_OPTS} -Xms${HEAP_MEMORY} -Xmx${HEAP_MEMORY} -XX:PermSize=${PERM_MEMORY} -XX:MaxPermSize=${PERM_MEMORY} -Dcom.sun.management.jmxremote.port=${JMX_PORT} -Djava.rmi.server.hostname=${JMX_HOST} -Dapp.home=${APP_HOME}"

    echo "start jvm args ${JAVA_OPTS}"

    nohup java -classpath .:./aa-media-2.0.0.jar:$CLASSPATH $JAVA_OPTS com.aaa.media.aaaMediaServer&

    echo $! > $APPPIDFILE

    echo STARTED

    ;;

    stop)

    echo "Stopping server ... "

    if [ ! -f $APPPIDFILE ]

    then

    echo "error: count not find file $APPPIDFILE"

    exit 1

    else

    kill -15 $(cat $APPPIDFILE)

    rm $APPPIDFILE

    echo STOPPED

    fi

    ;;

    *)

    echo "Please enter start|stop ... "

    ;;

    esac

    exit 0

    展开全文
  • 1、使用Android Studio内置的Android Profilter 生成hprof文件 打开Android Profilter(View -> Tool View -> Android Filter) 2、把hprof文件转换为mat可以识别的标准格式,打开命令行:hprof-conv ...
  • java服务端程序报错后会生成hprof文件,我们可以通过mat工具MemoryAnalyzer进行分析 下载地址: http://www.eclipse.org/mat/downloads.php 说明: 查看HPROF快照  JProfiler能打开用JVM工具(比如...
  • Android studio导出hprofMAT工具流程

    千次阅读 2018-10-11 19:07:41
    准备MAT工具: 工具地址 : https://www.eclipse.org/mat/ 这里有两种方式:一是以插件的...对于生成hprof文件,Android studio 3.0之后的版本和3.0之前的版本可以说是完全不一样的,如果你使用过eclipse开发过...
  • 在Eclips的DDMS模式下,选中所要分析的进程,点击按钮,Dump HPROF file导出 hprof 文件,使用MAT 工具进行分析。 打开 MAT 工具,File-->Open Heap Dump... 选择你刚刚保存的 hprof 文件打开 此时,会弹出一...
  • 内存优化工具-MAT

    2019-07-01 11:17:46
    1、使用Android的profiler生成hprof文件 点击1生成hprof文件,点击2进行保存,保存后还要对生成的hprof文件进行转换。 转换方式如下 https://www.cnblogs.com/zhangqie/p/8566010.html 使用mat打开转换后的...
  • Android MAT

    2012-03-01 11:23:04
    生成hprof文件:   DDMS-Devices:Update Heap, Cause GC, Dump HPROF file. Eclipse自动生成的hprof文件路径:C:\Documents and Settings\Administrator\Local Settings\Temp\android****.hprof 也可以自选...
  • 这时须要生成多个单独的HPROF文件。 以下是一些关于怎样在MAT里比較多个heap dumps的内容 1.第一个HPROF 文件(usingFile > Open Heap Dump ). 2.打开Histogram view. 图1. Histogram Viewbutton 3.在...
  • Android内存泄露利器(hprof篇)

    千次阅读 2014-11-19 14:33:00
    我们可以使用代码生成hprof,然后使用批处理hprof文件,然后用MAT进行对多个hprof文件比较分析。 一、批处理配置文件 批处理配置文件config.bat如下: rem the following var is for getProcessState.bat set ...
  • eclipse与visualVM与mat

    2018-06-06 00:55:00
    以及如何运用visualVM生成hprof文件;如何用visualVM分析CPU消耗,程序瓶颈在哪里;怎么用MAT导入hprof文件以及简单的查看,仅推荐刚刚接触GC的萌新食用,讲得不对的地方欢迎大佬指正 ------------------------------....
  • [MAT]使用MAT比较多个heap dump文件

    万次阅读 2014-08-12 11:39:39
    这时需要生成多个单独的HPROF文件。下面是一些关于如何在MAT里比较多个heap dumps的内容(有一点复杂):1. 第一个HPROF 文件(usingFile > Open Heap Dump ).2. 打开Histogram view.图1. Histogra
  • 首先我们要学会如何生成hprof文件 DDMS生成hprof文件 步骤 1.在AS中打开DDMS,运行程序 2.在Devices中选择要分析的应用程序进程,点击UpdateHeap按钮之后开始追踪 3.进行可能发生内存泄漏的操作 4.单击Dump HPROP ...
  • 这时须要生成多个单独的HPROF文件。以下是一些关于怎样在MAT里比較多个heap dumps的内容(有一点复杂):1. 第一个HPROF 文件(usingFile > Open Heap Dump ).2. 打开Histogram view.图1. H...
  • Memory Analyzer (MAT)

    2012-01-31 21:38:59
    http://eclipse.org/mat/   ...按钮生成hprof文件。 通过AndroidSDK/tools下的hprof-conv工具将步骤1生成的hprof文件转换为标准格式的hprof文件,命令行为:hprof-conv <infile&...
  • mat工具使用

    2016-07-11 18:46:15
    1 概述mat是用于分析java内存泄露的工具之一。2 生成hprof打开Android Device Monitor(或者Eclipse),...第三个图标 Dump HPROF file 用来将堆内存生成HPROF文件。 第四个图标 Gause GC 用于触发GC回收内存,一般在
  • 1、在eclipse中一次点击Help -> install new sorftware 然后输入...2、使用下面代码生成文件java_pid6564.hprof后,打开java_pid6564.hprof,报错“Parsing heap dump from‘**\java_pid6564.hp
  • ./jmap -dump:format=b,file=dump.hprof PID //注意生成文件类型是hprof dump的分析工具叫mat(MemoryAnalyzer)需要依赖jdk运行 在windows上只需要解压,然后双击MemoryAnalyzer.exe就可以; 当然可能会遇到打不...
  • 前言 概念 hprof文件:指的是当前Android堆...1、生成hprof文件导出 2、打开MAT 导入我们的2个hprof文件,其中1个是旋转多次屏幕之后的文件(属于内存泄漏部分),另1个是没有内存泄漏的文件,通过以下操作打...
  • MAT使用

    2017-07-17 22:59:00
    一.简介 Eclipse提供的一个内存分析工具。...androidstudio的DDMS可以生成hprof是什么文件,不过需要进行一下格式转化(.hprof文件从Dalvik格式转换成J2SE HPROF格式),才可以导入MAT独立版软件。 可以做...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 126
精华内容 50
关键字:

mat生成hprof文件