知识大全 GC策略&内存申请、对象衰老

Posted 衰老

篇首语:做一个决定,并不难,难的是付诸行动,并且坚持到底。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 GC策略&内存申请、对象衰老相关的知识,希望对你有一定的参考价值。

GC策略&内存申请、对象衰老  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  

  JVM里的GC(Garbage Collection)的算法有很多种 如标记清除收集器 压缩收集器 分代收集器等等 详见HotSpot VM GC 的种类

  现在比较常用的是分代收集(generational collection 也是SUN VM使用的 J SE 之后引入) 即将内存分为几个区域 将不同生命周期的对象放在不同区域里:young generation tenured generation和permanet generation 绝大部分的objec被分配在young generation(生命周期短) 并且大部分的object在这里die 当young generation满了之后 将引发minor collection(YGC) 在minor collection后存活的object会被移动到tenured generation(生命周期比较长) 最后 tenured generation满之后触发major collection major collection(Full gc)会触发整个heap的回收 包括回收young generation permanet generation区域比较稳定 主要存放classloader信息

  young generation有eden 个survivor 区域组成 其中一个survivor区域一直是空的 是eden区域和另一个survivor区域在下一次copy collection后活着的objecy的目的地 object在survivo区域被复制直到转移到tenured区

  我们要尽量减少 Full gc 的次数(tenured generation 一般比较大 收集的时间较长 频繁的Full gc会导致应用的性能收到严重的影响)

  堆内存GC

  JVM(采用分代回收的策略) 用较高的频率对年轻的对象(young generation)进行YGC 而对老对象(tenured generation)较少(tenured generation 满了后才进行)进行Full GC 这样就不需要每次GC都将内存中所有对象都检查一遍

  非堆内存不GC

  GC不会在主程序运行期对PermGen Space进行清理 所以如果你的应用中有很多CLASS(特别是动态生成类 当然permgen space存放的内容不仅限于类)的话 就很可能出现PermGen Space错误

  内存申请 对象衰老过程

  一 内存申请过程

  &# ;JVM会试图为相关Java对象在Eden中初始化一块内存区域

  &# ;当Eden空间足够时 内存申请结束 否则到下一步

  &# ;JVM试图释放在Eden中所有不活跃的对象(minor collection) 释放后若Eden空间仍然不足以放入新对象 则试图将部分Eden中活跃对象放入Survivor区

  &# ;Survivor区被用来作为Eden及old的中间交换区域 当OLD区空间足够时 Survivor区的对象会被移到Old区 否则会被保留在Survivor区

  &# ;当old区空间不够时 JVM会在old区进行major collection

  &# ;完全垃圾收集后 若Survivor及old区仍然无法存放从Eden复制过来的部分对象 导致JVM无法在Eden区为新对象创建内存区域 则出现 Out of memory错误

  二 对象衰老过程

  &# ;新创建的对象的内存都分配自eden Minor collection的过程就是将eden和在用survivor space中的活对象copy到空闲survivor space中 对象在young generation里经历了一定次数(可以通过参数配置)的minor collection后 就会被移到old generation中 称为tenuring

  &# ;GC触发条件

  GC类型触发条件触发时发生了什么注意查看方式 YGC eden空间不足

  清空Eden+from survivor中所有no ref的对象占用的内存将eden+from sur中所有存活的对象copy到to sur中一些对象将晋升到old中:to sur放不下的存活次数超过turning threshold中的重新计算tenuring threshold(serial parallel GC会触发此项)

  重新调整Eden 和from的大小(parallel GC会触发此项)

全过程暂停应用是否为多线程处理由具体的GC决定 jstat –gcutil gc log FGC

  old空间不足perm空间不足显示调用System GC RMI等的定时触发YGC时的悲观策略dump live的内存信息时(jmap –dump:live)

清空heap中no ref的对象permgen中已经被卸载的classloader中加载的class信息如配置了CollectGenOFirst 则先触发YGC(针对serial GC)如配置了ScavengeBeforeFullGC 则先触发YGC(针对serial GC)  全过程暂停应用是否为多线程处理由具体的GC决定是否压缩需要看配置的具体GC jstat –gcutil gc log cha138/Article/program/Java/hx/201311/26151

相关参考

知识大全 JVM内存模型及垃圾收集策略解析(1)

JVM内存模型及垃圾收集策略解析(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一JVM内

知识大全 浅谈优化SQLServer数据库服务器内存配置的策略

浅谈优化SQLServer数据库服务器内存配置的策略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 .NET对象占内存多少

.NET对象占内存多少  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一直有一个小小的疑惑——N

知识大全 如何计算java对象占用的内存

  Java有一个很好的地方就是java的垃圾收集机制这个机制集成于jvm的对程序员来说是隐藏且不透明的这种情况下如何得到某个对象消耗的内存呢?      曾经看到过有人用以下方法来计算在生成该obj

知识大全 网络编辑种内存使用习惯总结

  先申请再使用不要在申请内存之前使用char*p;memcpy(pasdfstrlen(asdf));//出错returnp;  申请了内存检查是否申请成功char*p=newchar[size];

精细化工废水的污染特性分析及其控制策略

摘要:针对精细化工废水处理难以稳定达标的现状,采用国家标准方法、离子色谱、ICP/MS、GC/MS等分析手段研究了浙江省某工业园区精细化工废水的COD、BOD、氨氮、色度等常规指标及主要阴阳离子和有机

精细化工废水的污染特性分析及其控制策略

摘要:针对精细化工废水处理难以稳定达标的现状,采用国家标准方法、离子色谱、ICP/MS、GC/MS等分析手段研究了浙江省某工业园区精细化工废水的COD、BOD、氨氮、色度等常规指标及主要阴阳离子和有机

精细化工废水的污染特性分析及其控制策略

摘要:针对精细化工废水处理难以稳定达标的现状,采用国家标准方法、离子色谱、ICP/MS、GC/MS等分析手段研究了浙江省某工业园区精细化工废水的COD、BOD、氨氮、色度等常规指标及主要阴阳离子和有机

知识大全 销毁对象的三把利剑

  在任何一个面向对象的语言中这个对象销毁机制都是很重要的因为如果对象不能够被及时的回收那么很多没用的对象就仍然会占用内存地址久而久之就会导致内存耗竭从而导致服务器当机  在这个对象的销毁上Java语

某型号计算机的配置为:Intel酷睿2.8GHz/4G/500GB/50X/19’,那么该机器的内存大小是

某型号计算机的配置为:Intel酷睿2.8GHz/4G/500GB/50X/19’,那么该机器的内存大小是_____。A、2.8GHzB、4GC、500GBD、50X答案:B解析:计算机配置“Inte