【Android】【内存】java.lang.OutOfMemoryError 问题分析

来源:互联网 发布:win7添加打印机usb端口 编辑:程序博客网 时间:2024/06/05 10:17

一、前言

项目中含有 rar 压缩包解压功能,使用的是 junrar,在解压一文件时(70多M,文件不大,但1000多张gif,最大者1M,见邮件),出现 java.lang.OutOfMemoryError


二、hprof文件获取

使用Eclispse ,Eng 手机

1. DDMS Devices 视图中 选中进程,点击 Update Heap,Heap 视图中 点击 Cause GC

2. 解压rar文件,观察 Heap Size 及 Allocated 数据变化

3. 内存异常时,点击 Dump HPROF File,生成内存快照,用于内存分析(oom时,Eclipse自动抓起hprof文件并打开)


三、问题分析

使用工具 MAT 分析


1. Overview

可见有一处58.9M的内存使用



2. 查看Histogram

按Retained Heap排序,发现byte[] 共80M左右

右键选择 List objects -> with incomming , 结果如图3



3. 在占用最大的 byte处,右键选择 Merge Shortest Paths to GC Roots, 结果如图4



4. 依次展开,发现引用顺序,成员mem 占用 56M左右,

去review 代码,然后判断占用是否正常





注:

junrar 依赖如下

1.  Apache Commons VFS 

下载地址:commons-vfs-2.1.tar.gz

2. Apache Commons Logging

下载地址:commons-logging-1.2-bin.tar.gz



0 0
原创粉丝点击