`
youlong699
  • 浏览: 21778 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

gc 问题理解

 
阅读更多

定义计时单位t,一般对象的寿命从1t到10t不等,长对象为mt不死,对象大小均为s,内存空间大小es,s0s,s1s,os,ps 。单位时间产生不同生命周期的对象为……,那么假设5t时es填满,根据对象的寿命及生成时间点,有些对象被清除,剩余进入s0s。
假设对象生成是匀速的,gc周期也就基本固定,在多次gc后,s区填满,高龄对象进入old区
这样一来,影响内存使用的因素就比较明确了:
……

 
 

随着对象生成频率加快,gc发生的更加频繁,极端情况1t一次的话,对象基本无法在young被回收

 

简 化场景二: 对象都是等周期,匀速生成,在任意时间点的存活对象比例是固定的,看成是河流的水位,若对象周期大于gc周期水位将会高于eden容量,大量对象进入 tenured;正因为对象周期一般远小于gc周期,也就是水位远低于eden区才有了eden、survivor的结构。
那么随着生成速率加快,存活比例不变但水位上升,如果s区容量不小于水位,则tenured不增加;否则溢出到t区。

 

对场景扩展,有些对象生命周期大于两个gc周期,从eden到survivor后,再次gc仍然不能释放,需三次或者更多次才能释放,这样s区较eden区存活率更高。

 

再扩展,由于较长周期对象的存在,如果s区小于综合水位(e区转移加s区的),年长对象被移入t区,水位陡然下降。随着新对象产生,gc继续进行,水位再次上涨,周期性涨跌,t区不断积累。直到一次cmsgc产生释放提区空间。

 

如果对象的生命周期都是相同的,那么e,s区的存活率是一样的,在对象匀速产生的时候,水位也就不变了,要么都不会进入t区(s大于水位),要么总是有对象溢出到t区(s小于水位)。但是,现实不可是能匀速,在突发的时候就有可能水位高于s区,而溢出。

 

独立的几个问题,
如果对象生命都小于gc周期,那么,s区每次gc总是会被清空;
大于一个gc周期的对象,会被在s区多次移动,s增大,反而会使一些对象被移动次数增加;
通过增大s区减小高水位溢出;
通过调整threadhold减少因在s区之间的反复移动;
能否通过btrace跟踪gc移动了那些对象或者实例对应的类名;
如果tenured回收一个对象与eden相当,那么大于两个gc周期的对象移入t区都是划算的,但是由于t区存活率高的多且容量大,显然回收一个对象的代价更高

 

调整原则思考:

 · 晋升年龄(MaxTenuringThreshold),如果对象的生命周期两极分化良好,那么可以将threshold调小,这样能减少长对象在s区移动的代价。最优的情况是,在系统稳定运行一段时间后,oldGC频率不增加(或者oldGen增长率不变)

 
分享到:
评论

相关推荐

    深入理解JVM&G1GC

    资源名称:深入理解JVM & G1 GC内容简介:G1 GC提出了不确定性Region,每个空闲Region不是为某个固定年代准备的,它是灵活的,需求驱动的,所以G1 GC代表了先进性。《深入理解JVM & G1 GC》主要为学习Java语言的...

    深入理解JVM&G1; GC

    深入理解JVM &G1; GC内部结构,年轻代,老年代,元空间等分布情况

    深入理解JVM & G1 GC.rar

    G1 GC提出了不确定性Region,每个空闲Region不是为某个固定年代准备的,它是灵活的,需求驱动的,所以G1 GC代表了先进性。本书主要为学习Java语言的学生、初级程序员提供GC的使用参考建议及经验,着重介绍了G1 GC ...

    深入理解JVM & G1 GC

    深入jvm垃圾回收 调优细节。

    c#的GC垃圾回收机制详细讲解文档

    首先:谈谈托管,什么叫托管,我的理解就是托付C#运行环境帮我们去管理,在这个运行环境中可以帮助我们开辟内存和释放内存,开辟内存一般用new,内存是随机分配的,释放主要靠的是GC也就是垃圾回收机制。哪么有两个...

    几何公差 GDT GG-GC-GX-GN的正确理解.docx

    几何公差 GDT GG-GC-GX-GN的正确理解

    JVM GC原理深入学习.pdf

    同时,为了能更深入理解与之相关的知识点,本文特地编写了“第二章 基础知识”,详细的讲解与GC学习相关的JVM架构、JVM选项、Object内存布局、指针压缩等内容,以便读者能更加清晰的理解GC原理的底层逻辑。

    gcviewer-1.37-SNAPSHOT.jar

    用于分析 java gc日志文件。根据日志中的CMS GC统计信息可得到Full GC(也可以理解为Major GC)以及Minor GC相关数据

    GG,GC,G,GN的正确理解.doc

    GG,GC,G,GN的正确理解.doc

    一篇文章教你深入理解Java垃圾收集(GC)机制.docx

    一篇文章教你深入理解Java垃圾收集(GC)机制

    JVM体系结构与GC调优.pdf

    jvm体系结构与GC调优,图文齐飞,方便理解,,非常适合入门的java工程师以及性能测试工程师阅读,欢迎大家下载

    JDK8GC-cheatsheet.pdf

    JVM的参数有很多很多,根据我的统计JDK8中JVM的参数总共有1853个,正式的参数也有680个。 这么多参数带给我们的是对...为了更好的让大家理解JDK8中 GC的调优的秘籍,这里特意制作了一张PDF,遇到问题就看两眼,不美吗?

    JVM:GC机制

    如果你对jvm没有基本的了解,那么你可以先了解jvm之后再参阅本人会更便于理解 建议参考文章:《一张图看懂JVM》 垃圾回收机制(GC) 首先要知道一些概念 年轻代、老年代、Eden区、Survivor区 年轻代:由Eden区、...

    GC详解及优化.doc

    1、理解Java垃圾回收; 2、Java垃圾回收的监控; 3、GC 调优; 4、Apache的MaxClients设置及其对Tomcat Full GC的影响; 5、Java应用性能优化的原则

    java基础学习JVM中GC的算法

    主要介绍了java基础学习JVM中GC的算法,通过图文加深对GC算法思路的理解。

    成为JavaGC专家上(1)—深入浅出Java垃圾回收机制

    如果你曾经想过如何正确的选择GC算法,那意味着你已经完全理解你所开发的应用的特点。当然,我们不能以偏概全,这不能作为评价一个好的开发人员的共通标准。但是,我要说的是,深入理解GC是成为一名伟大的程序员的...

    AD 概念&FSMO; 概念&GC; 概念

    深入理解全局编录服务器GC ....................................................................................... 6 域用户登录过程和GC的关系 ...............................................................

    Java虚拟机详解04----GC算法和种类【重要】 - 千古壹号 - 博客园.html

    Java虚拟机详解04----GC算法和种类【重要】,有助于更深入理解记忆,文字配图片,10分钟让你记住gc工作机制。

    golang源码分析–gc

    由于本人也属于小白学习,学习过程中也有很多不解的地方,欢迎大家提问,或者指出我未能讲到的部分,发现gc是一个很庞大的逻辑所以此篇会一直更新,到我觉得真的完全理解了再停更 golang概览及原理 golang的垃圾回收...

    深入理解java虚拟机视频教程

    深入理解java虚拟机视频教程,jvm原理,java虚拟机,jvm性能调优,内存模型,gc工作原理,内存分配,类的加载等等视频教程

Global site tag (gtag.js) - Google Analytics