标签: 内存 分析 男人 | 发表时间:2015-09-02 15:37 | 作者:空巢男人
1.静态内存分析(Analyze)
缺点:不运行程序,直接对代码进行分析.根据代码的上下文的语法结构,看语法是否有问题.(不够准确,但是如果通过静态内存分析,有提示出现了内存泄露,需要通过分析代码上下文查看是否有内存泄露)
优点:真正运行起来程序,并且可以对某一个操作来具体分析.当用户做了某一个操作时,该操作是否产生了内存泄露.(非常准确,如果提示有内存泄露,基本可以说明代码有问题)
缺点:分析速度非常慢,需要一步步来分析代码是否有问题.且可能在分析过程中有遗漏代码
二.内存使用注意
1> 利用imageNamed:方法加载过的图片, 永远有缓存, 这个缓存是由系统管理的, 无法通过代码销毁缓存
1> 利用initWithContentsOfFile:/imageWithContentsOfFile:/imageWithData:等方法加载过的图片, 没有缓存, 只要用完了, 就会自动销毁
2> 基本上, 除imageNamed:方法以外, 其他加载图片的方式, 都没有缓存
三.2个专业术语
1> 该释放的对象, 没有被释放(已经不再使用的对象, 没有被释放)
2.内存溢出(Out Of Memory)
2> 数据长度比较小的数据类型 存储了 数据长度比较大的数据
本文链接: 内存分析 ,转载请注明。
- - 博客园_首页
1.静态内存分析(Analyze). 优点:分析内存非常快,已经可以对整个项目的内存就行分析. 缺点:不运行程序,直接对代码进行分析.根据代码的上下文的语法结构,看语法是否有问题.(不够准确,但是如果通过静态内存分析,有提示出现了内存泄露,需要通过分析代码上下文查看是否有内存泄露). 2.动态内存分析(Profile == Instruments). 优点:真正运行起来程序,并且可以对某一个操作来具体分析.当用户做了某一个操作时,该操作是否产生了内存泄露.(非常准确,如果提示有内存泄露,基本可以说明代码有问题). 缺点:分析速度非常慢,需要一步步来分析代码是否有问题.且可能在分析过程中有遗漏代码.
- - ITeye博客
jdk自带的jmap就是java内存映像工具,可以用于上生成堆转储快照:. 在eclipse中启动一个java类,打开jdk安装目录下的C:/Program Files/Java/jdk1.6.0_11/bin目录,双击jconsole.exe,显示连接窗口:. ,单击pid为6920的选项,点连接进入,可以看到jvm运行时的多种参数,. 在运行中输入cmd,在命令行中输入以下命令. C:/Documents and Settings/Administrator/jmap -dump:format=b,file=eclipse.bin 6920 ,6920为java进程的pid,回车,显示heap dump file created.
- - 开源软件 - ITeye博客
我们使用的是 Eclipse Memory Analyzer V0.8,Sun JDK 6. 和其他插件的安装非常类似,MAT 支持两种安装方式,一种是“单机版“的,也就是说用户不必安装 Eclipse IDE 环境,MAT 作为一个独立的 Eclipse RCP 应用运行;另一种是”集成版“的,也就是说 MAT 也可以作为 Eclipse IDE 的一部分,和现有的开发平台集成. 集成版的安装需要借助 Update Manager. 如图 1 所示,首先通过 Help -> Software Updates. 选择“Available Software“然后按如图 2 所示的方式添加 MAT 的更新地址 http://download.eclipse.org/technology/mat/0.8/update-site/.
- 小丑鱼 - 搜索技术博客-淘宝
Redis 内存存储结构. 本文是基于 Redis-v2.2.4 版本进行分析.. 1.1 Redis 内存存储总体结构. Redis 是支持多key-value数据库(表)的,并用 RedisDb 来表示一个key-value数据库(表). redisServer 中有一个 redisDb *db; 成员变量, RedisServer 在初始化时,会根据配置文件的 db 数量来创建一个 redisDb 数组. 客户端在连接后,通过 SELECT 指令来选择一个 reidsDb,如果不指定,则缺省是redisDb数组的第1个(即下标是 0 ) redisDb. 一个客户端在选择 redisDb 后,其后续操作都是在此 redisDb 上进行的.
- gOODiDEA - NoSQLFan
本文转载自Day Day Up博客,文章对Redis的内存分配封装zmalloc库进行了分析,描述了Redis在内存分配和使用统计方面的各种细节和技巧. 原文链接:blog.ddup.us. Redis中到处都会进行内存分配操作. 为了屏蔽不同平台之间的差异,以及统计内存占用量等,Redis对内存分配函数进行了一层封装,程序中统一使用zmalloc,zfree一系列函数,位于zmalloc.h,zmalloc.c文中. 上边说过,封装就是为了屏蔽底层平台的差异,同时方便自己实现相关的统计函数. 若系统中存在Google的TC_MALLOC库,则使用tc_malloc一族函数代替原本的malloc一族函数.
- - 淘宝核心系统团队博客
VoltDB是一个宣称性能超过Mysql 100倍的新型数据库. 它源自Micheal Stonebraker一篇论文H-Store. 在这篇论文发表后,Stonebraker成立了VoltDB公司带着他的一些学生开始在OLTP数据库领域打拼. Stonebraker从上世纪70年代——数据库刚开始发展的时间——就开始在数据库领域活跃,这样的老古董提出的数据库的新想法,给了整个存储领域很大的想象空间. VoltDB源起于应用领域与硬件发展翻天覆地的变化. 用户的使用方法发生了变化,在数据库开始发展的阶段,事务是一个较长的过程,用户或者管理员可以在”BEGIN TRANSACTION”和”END TRANSACTION”之间慢慢地人工执行整个事务的步骤.
- - Taobao QA Team
对于大型服务端应用程序来说,有些内存泄露问题很难在测试阶段发现,此时就需要分析JVM Heap Dump文件来找出问题. 随着单机内存越来越大,应用heap也开得越来越大,动辄十几G的Dump也不足为奇了. 要快速分析,快速定位问题就必须有给力的工具帮忙,下面我来介绍下常用内存分析工具. JDK自带的一个工具,是JVM Heap导出的必备工具. jmap -dump:format=b,file=xxx.bin pid pid是java程序pid. 此命令会将虚拟机heap镜像导成文件. 不过jmap也有直接分析功能:jmap –histo pid,如下图. 优点是可以直接查看对象的大小和类型,缺点是无法查看详细的对象引用信息.
- - BlogJava-首页技术区
这是一篇阅读MAT helper的笔记. Heap dump是java进程在特定时间的一个内存快照. 通常在触发heap dump之前会进行一次full gc,这样dump出来的内容就包含的是被gc后的对象. dump文件包含的内容:. 1,全部的对象:类,域,原生值和引用;. 2,全部的类:classloader,类名,超类,静态域;. 3,GC root:被JVM定义的可触达的对象;. 4,线程栈和本地变量:线程的call stack,本地对象每帧的信息. dump文件不包含内存的分配信息,因此无法查询谁创建了哪个对象这样的信息. Shallow heap是一个对象占用的内存空间,一个对象需要32或者64bits.
- - 企业架构 - ITeye博客
package com.chinaso.phl; import java.lang.reflect.Field; /** * @author piaohailin * @date 2013-12-24 */ public class Server {. //2 虚拟机栈和本地方法栈溢出. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.
- - CSDN博客研发管理推荐文章
今天,发现游戏逻辑服务器内存溢出问题,每隔一定时间就生成java_pidxxxxxx.hprof ,基本1G内存分配不够用了,导致FGC频繁发生. MAT Eclipse Memory Analyzer Tool(MAT)分析内存泄漏. MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗. 使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象. 当服务器应用占用了过多内存的时候,会遇到OutOfMemoryError.