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

一、前言

项目中含有 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 分析,也可使用Eclipse MAT插件

工具下载地址:Memory Analyzer 


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



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值