`
youlong699
  • 浏览: 22678 次
  • 性别: 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&G1; GC

    《深入理解JVM & G1 GC》一书深入剖析了Java虚拟机(JVM)的工作原理,特别是针对垃圾收集器(GC)中的G1(Garbage-First)算法进行了详尽的探讨。JVM是Java程序运行的基础,它负责解析、编译、执行Java代码,并管理...

    深入理解JVM&G1GC

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

    深入理解JVM & G1 GC

    《深入理解JVM & G1 GC》这篇文章和相关压缩包文件主要聚焦于Java虚拟机(JVM)的内存管理,特别是垃圾收集器(GC)的优化,特别是G1(Garbage-First)垃圾收集器的深度解析。下面将详细阐述JVM、GC的基本概念,...

    JAVA中对GC的理解

    理解GC对于Java开发者至关重要,因为它直接影响程序的性能和稳定性。通过调整JVM参数,可以选择合适的垃圾回收策略和回收器,优化应用程序的内存使用和响应速度。同时,了解GC的工作原理可以帮助开发者避免创建过多...

    SENSOR_GC1054.rar_1054-sensor_SENSOR_GC1054_gc1054

    从标签"1054-sensor, sensor_gc1054, gc1054"我们可以推断,这个文件集可能是为了帮助开发者理解和编程GC1054传感器。"1054-sensor"可能是传感器的一个型号或者版本号,而"sensor_gc1054"和"gc1054"可能是编程接口...

    gcviewer监控gc工具

    《GCViewer:深入理解Java垃圾收集日志分析与监控》 在Java开发中,内存管理和垃圾收集是至关重要的环节,不当的内存管理可能导致系统性能下降甚至出现应用崩溃。GCViewer是一款强大的工具,专用于分析和监控Java...

    GC2053_1,2.9"GC2053sensor_格科微_GC2053_gc2053datasheet_galaxycore_

    《GC2053:格科微电子的1/2.9" FHD CMOS图像传感器解析》 在现代科技的快速发展中,图像传感器在各个领域都...通过深入理解GC2053的数据表,开发者和制造商可以更好地利用这一传感器,设计出更符合市场需求的产品。

    GC6153_SERIAL_GC6153

    这些文件是驱动程序开发的关键组成部分,开发者可以利用它们来理解驱动的工作原理,进行调试,或者根据具体需求进行定制和优化。 总的来说,GC6153_SERIAL_GC6153代表了一套完整的解决方案,它让MTK平台能够有效地...

    gcviewer.rar

    《GCViewer:深入理解Java垃圾收集的利器》 在Java编程世界中,内存管理是至关重要的,特别是垃圾收集(Garbage Collection, GC)机制,它负责自动清理不再使用的对象,以避免内存泄漏。GCViewer正是这样一款强大的...

    GCViewer-FullGC分析工具

    4. **事件时间线**:GCViewer提供了一个时间线视图,显示了所有GC事件的发生顺序,帮助开发者理解GC活动与应用程序性能之间的关系。 5. **统计信息**:除了图形化展示,GCViewer还提供了详细的统计信息,如平均、...

    GCviewer-1.35 GC分析工具

    它可以帮助开发者理解、优化和调试应用程序的内存行为,从而提升性能,避免内存泄漏等问题。 ### 一、什么是GC? 在Java中,内存管理主要由垃圾收集器负责。GC自动回收不再使用的对象所占用的内存空间,以防止内存...

    摄像头gc0308资料.rar

    总的来说,GC0308摄像头的配置和使用需要对寄存器操作有深入的理解,同时还需要熟悉C语言编程以及I2C或SPI接口的通信协议。通过细心地研究数据手册,并结合实际应用调试,开发者能够充分利用GC0308的性能,实现高...

    gc0310 前置摄像头驱动

    开发者可以通过分析这些文件来理解驱动的工作原理,或者在遇到问题时进行调试和修复。源代码的结构通常包括驱动模块的初始化、I/O操作、中断处理、电源管理等部分。同时,可能还会有针对gc0310特性的优化代码,例如...

    MT6261_GC6153_Driver_V0_格科微gc61538w_GC6153_格科微_格科微GC6153@_mt6261

    驱动开发的关键在于理解和适配硬件特性。对于SPI接口,开发者需要编写代码来设置时钟频率、极性、相位等参数,以及定义数据传输的命令序列。对于GC6153模组的240*320分辨率,驱动需要处理像素数据的读写操作,确保...

    visualGC.zip

    VisualGC就是一款强大的工具,它为开发者提供了直观的方式来监控和分析JVM的垃圾收集(Garbage Collection,简称GC)行为,帮助我们更好地理解和优化Java应用的性能。 VisualGC是JDK自带的JVisualVM工具的一个插件...

    深入理解JVM & G1 GC.rar

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

    visualgc插件离线安装包

    它提供了实时的GC活动视图,包括GC暂停时间、内存区域分配情况等,这对于理解JVM内存管理以及优化GC策略具有极大的帮助。尤其在处理大规模应用或者遇到性能问题时,VisualGC的直观展示能够为问题定位提供有力的支持...

    GC5025.tar.gz_RK camera_camera_gc5025 RK3368_gc5025驱动_rk摄像头驱动

    本文将深入探讨针对RK3368平台的GC5025摄像头的驱动程序,基于提供的"GC5025.tar.gz"压缩包文件,我们将解析其核心内容,理解其工作原理以及如何进行驱动的安装与调试。 GC5025是一款500万像素的CMOS图像传感器,...

    摄像头 gc2385 代码 调试

    在IT行业中,摄像头驱动开发是硬件与软件交互的关键部分,特别是在移动设备如...通过深入理解GC2385传感器特性、MTK6739平台的硬件架构以及相关的驱动代码,开发者可以有效地解决问题,实现稳定、高效的摄像头功能。

Global site tag (gtag.js) - Google Analytics