(JVM内存管理.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(JVM内存管理

相对而言MAT功能比jhat强大很多,分析的速度也快一些,因此,如果要分析jvm堆dumap文件,首选推荐的是MAT。 GC趋势对于可图形界面连到需查看GC状况的机器的情况而言,VisualVM是常用的选择;对于不能采用图形界面方式的,输出GC日志 及采用jstat命令直接分析是常用的选择。 在查找内存是程序中的什么对象占用时,需要分析内存的具体消耗状况,对于有图形界面可用的情况,VisualVM是常用的选择;对于不能采用图形界面方式的,可通过jmap dump生成文件后,再通过MAT进行分析是常用的选择。 其他: /s/blog_605f5b4f0100hlse.html 四、内存分析工具——工具使用建议 QA thanks? Email: mengxl@ Popo : frankie_meng@ Msn : mengxiangl@ 默认使用余数式hash算法: server = serverlist[hash(key) % serverlist的个数] 这样明显有一个缺点:当服务器的个数变化时,所有的hash都将无效,全部得重来一次 JVM内存管理 mengxl 2011-11-2 内存空间 内存分配 内存回收 内存分析工具 主要内容 两个子系统:Class loader子系统和Execution engine(执行引擎)子系统 两个组件:Runtime data area(运行时数据区域)组件和Native interface(本地接口)组件 一、内存结构 Class loader子系统 根据给定的全限定名类名(如java.lang.Object)来装载class 文件的内容到Runtime data area中的method area(方法区域) Execution engine子系统 执行classes中的指令。任何JVM specification实现(JDK)的核心都是Execution engine Native interface组件 与native libraries交互,是与其它编程语言交互的接口。当调用native方法的时候,就进入了一个全新的并且不再受虚拟机限制的世界 一、内存结构 Runtime Data Area组件——JVM的内存 Heap(堆):一个Java虚拟实例中只存在一个堆空间,用于存储对象实例及数组值,可以认为Java中所有通过new创建的对象的内存都在此分配,其大小可以通过-Xmx和-Xms来控制。 一、内存结构 堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,Survivor由S0和S1组成。新建的对象都是用新生代分配内存;旧生代用于存放新生代中经过多次垃圾回收仍然存活的对象 Runtime Data Area组件——JVM的内存 Method Area(方法区域) :被装载的class的信息存储在Method area的内存中。当虚拟机装载某个类型时,它使用类装载器定位相应的class文件,然后读入这个class文件内容并把它传输到虚拟机中。在Sun JDK中这块区域对应 Permanent Space,又称永久代。 可能抛出异常: java.lang.OutOfMemoryError: PermGen space 一、内存结构 Runtime Data Area组件——JVM的内存 Java Stack(java的栈):虚拟机只会直接对Java stack执行两种操作:以帧为单位的压栈或出栈,Java 栈为线程私有,当方法运行完毕,对应的栈帧所占用内存自动释放。可以通过-Xss来指定大小。 可能抛出异常: StackOverflowError 一、内存结构 Runtime Data Area组件——JVM的内存 Program Counter(程序计数器) :每一个线程都有它自己的PC寄存器,也是该线程启动时创建的。PC寄存器的内容总是指向下一条将被执行指令的地址。 Native method stack(本地方法栈):保存native方法进入区域的地址,用于支持native方法的执行,存储了每个native方法调用的状态。当一个线程调用本地方法时,它就不再受到虚拟机关于结构和安全限制方面的约束,它既可以访问虚拟机的运行期数据区,也可以使用本地处理 器以及任何类型的栈。 一、内存结构 堆(Heap)和非堆(Non-heap)内存 堆内存分配 非堆内存分配 JVM内存限制(最大值) 二、内存分配 堆(Heap)和非堆(Non-heap)内存 堆:就是Java代码可及的内存,是留给开发人员使用的。 非堆:就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构

文档评论(0)

lv21567 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档