网站大量收购闲置独家精品文档,联系QQ:2885784924

JVM内存模型和垃圾收集.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JVM内存模型和垃圾收集 fanzhang 2009.08.31 意义何在 内存和垃圾收集对Java程序的性能起着至关重要的作用,特别是对服务器程序。 遭遇OOM?响应速度慢?并发上不去?吞吐量不够? 内存和垃圾收集是Java程序的OS。 遍布问号的底层 堆?:根集合?、链结构、老的居底、从顶分配、可达性、活跃对象 栈在哪里?:主内存和工作内存?栈空间也要配置? 引用:强引用和弱引用?垃圾收集不用引用计数用什么(无法回收:树、子指向父)?引用值会被改变?对象哈希值何时与之相关? 堆(Heap) JVM管理的内存叫堆(Heap);32位Linux最大3G;64位无限制 初始-Xms:默认1/64但小于1G。 最大-Xmx:默认1/4但小于1G。 -Xms与-Xms设置相同值,对服务端应用来说要给足空间(重要) 最小空余-XX:MinHeapFreeRatio=40%。 最大空余-XX:MaxHeapFreeRatio=70%。 堆的分代(Generation) 堆分为三个代:Young、Old和Permanent,不同代采用不同的垃圾收集算法,以提升性能。(注:Permanent空间在大小上并没有计算在Heap空间之内)如下图: 年轻代(Young) 年轻代采取复制收集算法。分为3个区域:一个Eden,所有新建对象;两个Survivor区,用来实施复制算法。 -XX:NewRatio=Young:Old,推荐1:3 -XX:NewSize和-XX:MaxNewSize设置相同值,适当放大,减少GC(重要) -XX:SurvivorRatio= Eden:1个Survivor,默认比例8,适当减小,防止老年化(重要) 老年代(Old) 年轻代的对象挺过数次收集,就会进入老年代。老年代使用标记整理算法。老年代存活时间长,不用复制算法。 -XX:MaxTenuringThreshold=年轻代熬过多少次收集后进入老年代。 持久代(Permanent) 装载Class信息等基础数据 XX:MaxPermSize=64M,满了之后会引起一种不同类型的 OOM。类很多很多的程序,需要加大之,一般使用默认值即可。 GC的类型 Minor Collection:对Young,复制算法,频率高。 Major Collection:同时对Young和Old,也叫Full GC;Old频率要比Young低很多,采用标记清除/标记整理算法;System.gc()可以建议引发之,使用-XX:+DisableExplicitGC禁止代码调用。 Young的GC频繁,范围小,速度快,称之为Minor Collection。 Eden+1Suvivor空间达阀值 - 移动对象到to space - to space与from space互换角色 - 对象移动次数到阀值就足够老了-Old。 Survivor是Eden和Old的缓冲区,为Old把关,减少Old的大小和GC频次,Suvivor不足会Old化。 Old的GC范围广,较慢,频率低称之为Major Collection(Full Collection)。 先Young GC,再Old GC。 垃圾收集算法 复制(copying):将堆内分成两个相同空间,从根开始访问每一个关联的活跃对象。 将空间A的活跃对象全部复制到空间B,然后一次性回收整个空间A。 只访问活跃对象,遍历空间的成本较小,但需要巨大的复制成本和较多的内存,需要修改引用值。 如下图: 标记清除(mark-sweep):收集器先从根开始访问所有活跃对象,标记为活跃对象。 然后再遍历一次整个内存区域,把所有没有标记活跃的对象进行回收处理。 遍历整个空间的成本较大、暂停时间随空间大小线性增大、整理后堆里的碎片很多。 如下图: 标记整理(mark-sweep-compact):综合了上述两者的做法和优点,先标记活跃对象,然后将其合并成较大的内存块。如下图: GC收集器类型 串行收集器(Serial Collector) -XX:+UseSerialGC:年轻代串行复制,老年代串行标记整理。(注:目前已不使用)如下图: 并行收集器(Throughput Collector) -XX:+UseParallelGC:JDK5.0以上-server(Linux的JDK默认是-server)的默认值。 年轻代:暂停应用程序,多个垃圾收集线程并行的复制收集,线程数默认为CPU个数,可用-XX:ParallelGCThreads= 设定线程数。 年老代:暂停应用程序,与串行收集器一样,单垃圾收集线程标记整理。 从上可知该收集器需要2+的CPU时才会优于串行收集器。 如下图: 并发收集器(Concurrent L

文档评论(0)

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

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

1亿VIP精品文档

相关文档