- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
本文由简悦SimpRead转码,原文地址
我们知道,在用户输入的时,会使用一些hash算法对进行加工,比如SHA-1。这些信息
同样不允许在日志输出里出现,必须做脱敏处理,但是对于一个拥有系统权限的者来说,这些防护
依然是不够的。者可能会直接从内存中获取明文数据,尤其是对于Java来说,由于提供了jmap这
一类非常方便的工具,可以把整个堆内存的数据dump下来。
比如,“我的世界”这一类使用Java开发的游戏,会比其他语言的游戏更加容易一些,所以我们在
JVM中,如果把为char数组,其安全性会稍微高一些。
这是一把双刃剑,在保证安全的前提下,我们也可以借助一些外部的分析工具,帮助我们方便的找到问
题根本。
有两种方式来获取内存的快照。我们前面提到过,通过配置一些参数,可以在发生OOM的时候,
dump一份堆栈信息,这是一种;另一种,就是通过jmap主动去获取内存的快照。
jmap命令在Java9,使用jhsdb命令替代,它们在用法上,区别不大。注意,这些命令本身会占
用操作系统的资源,在某些情况下会造成服务响应缓慢,所以不要频繁执行。
jmap-dump:format=b,file=heap.bin37340
jhsdbjmap--binaryheap--pid37340
1.工具介绍
有很多工具能够帮助我们来分析这份内存快照。面已多次提到VisualVm这个工具,它同样可以加
载和分析这份dump数据,虽然比较“寒碜”。
专业的事情要有专业的工具来做,今天要介绍的是一款专业的开源分析工具,即MAT。
MAT工具是基于Eclipse平台开发的,本身是一个Java程序,所以如果你的堆快照比较大的话,则需
要一台内存比较大的分析机器,并给MAT本身加大初始内存,这个可以修改安装中的
MemoryAnalyzer.ini文件。
来看一下MAT工具的截图,主要的功能都体现在上了。其中,默认的启动界面,展示了占用内
存最高的一些对象,并有一些常用的快捷方式。通常,发生内存泄漏的对象,会在快照中占用比较大的
,分析这些比较大的对象,是我们切入问题的第一步。
点击对象,可以浏览对象的关系,这是一个非常有用的功能:
outgoingreferences对象的引出
incomingreferences对象的引入
pathtoGCRoots这是快速分析的一个常用功能,显示和GCRoots之间的路径。
另外一个比较重要的概念,就是浅堆(ShallowHeap)和深堆(RetainedHeap),在MAT上经常看
到这两个数值。
浅堆代表了对象本身的内存占用,包括对象自身的内存占用,以及“为了”其他对象所占用的内存。
深堆是一个统计结果,会循环计算的具体对象所占用的内存。但是深堆和“对象大小”有一点不同,
深堆指的是一个对象被回收后,能够释放的内存大小,这些被释放的对象集合,叫做保留集
(RetainedSet)。
如上图所示,A对象浅堆大小1KB,B对象2KB,C对象100KB。A对象同时了B对象和C对
象,但由于C对象也被D,所以A对象的深堆大小为3KB(1KB+2KB)。
A对象大小(1KB+2KB+100KB)A对象深堆A对象浅堆。
2.代码示例
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importjava.util.stream.IntStream;
publicclassObjects4MAT{
staticclassA4MAT{
B4MATb4MAT=newB4MAT();
}
staticc
您可能关注的文档
- 大众汽车特别发明权专有技术柱后轮罩tz 2qw2.pdf
- 课件详解简介workshop 3 intro ws1 flipchip.pdf
- siemens产品生命周期管理软件bprocess simulate virtual模拟虚拟调试.pdf
- 河南省陕州中学届高三下学期一次考理综物理试题版.pdf
- 上课件花钟匹配版推荐.pdf
- 贞芪扶正颗粒成人含医生版.pptx
- arch30170战斗考古评估问题1图片学习final.pdf
- consensus womens health aspects of polycystic ovary syndrome pcos1多囊卵巢综合征妇女健康方面共识.pdf
- 造化斋主时代精装版墨侠录.pdf
- 资料说明简介workshop 7syz for wssiwave.pdf
文档评论(0)