`
standalone
  • 浏览: 606330 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

GC 知识

    博客分类:
  • java
阅读更多

基本回收算法

  1. 引用计数(Reference Counting)
    比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。
  2. 标记-清除(Mark-Sweep)
    此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除。此算法需要暂停整个应用,同时,会产生内存碎片。
  3. 复制(Copying)
    此算法把内存空间划为两个相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另外一个区域中。此算法每次只处理正在使用中的对象,因此复制成本比较小,同时复制过去以后还能进行相应的内存整理,不过出现“碎片”问题。当然,此算法的缺点也是很明显的,就是需要两倍内存空间。
  4. 标记-整理(Mark-Compact)
    此算法结合了“标记-清除”和“复制”两个算法的优点。也是分两阶段,第一阶段从根节点开始标记所有被引用对象,第二阶段遍历整个堆,把清除未标记对象并且把存活对象“压缩”到堆的其中一块,按顺序排放。此算法避免了“标记-清除”的碎片问题,同时也避免了“复制”算法的空间问题。
  5. 增量收集(Incremental Collecting)
    实施垃圾回收算法,即:在应用进行的同时进行垃圾回收。不知道什么原因JDK5.0中的收集器没有使用这种算法的。
  6. 分代(Generational Collecting)
    基于对对象生命周期分析后得出的垃圾回收算法。把对象分为年青代、年老代、持久代,对不同生命周期的对象使用不同的算法(上述方式中的一个)进行回收。现在的垃圾回收器(从J2SE1.2开始)都是使用此算法的。
分代垃圾回收详述


如上图所示,为Java堆中的各代分布。

  1. Young(年轻代)
    年轻代分三个区。一个Eden区,两个Survivor区。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来 对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor去过来的对象。而且,Survivor区总有一个是空的。
  2. Tenured(年老代)
    年老代存放从年轻代存活的对象。一般来说年老代存放的都是生命期较长的对象。
  3. Perm(持久代)
    用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如Hibernate等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过-XX:MaxPermSize=<N>进行设置。

GC类型
GC有两种类型:Scavenge GC和Full GC
  1. Scavenge GC
    一般情况下,当新对象生成,并且在Eden申请空间失败时,就好触发Scavenge GC,堆Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。
  2. Full GC
    对整个堆进行整理,包括Young、Tenured和Perm。Full GC比Scavenge GC要慢,因此应该尽可能减少Full GC。有如下原因可能导致Full GC:
    • Tenured被写满
    • Perm域被写满
    • System.gc()被显示调用

 

分享到:
评论

相关推荐

    5GC知识分享.pptx

    5GC知识分享 5GC协议流程 5GC协议流程是 fifth-generation wireless systems 的核心组件,它定义了5G网络的架构、协议和接口。5GC协议流程主要包括了用户面(User Plane)和控制面(Control Plane)两个部分。用户...

    GC知识框架.png

    这是有关GC知识点完整版的思维导图,可以在我的博客中查看详细总结:https://blog.csdn.net/weixin_34566605/article/details/104784905

    2004-11-GC程序员考试题.rar_gc_程序员考试

    总之,掌握好GC知识对于成为一名合格的程序员至关重要,尤其是对于Java开发者而言,深入理解GC能帮助他们编写出更高效、更稳定的代码。通过系统的复习和实践,相信考生能够在GC程序员考试中取得优异的成绩。

    gc02m1 datasheet

    下面是根据GC02M1 datasheet的内容生成的相关知识点: 1. 传感器概述 GC02M1是一款1/5英寸的CMOS图像传感器,具有200万像素的分辨率。它的主要特点包括: * 高分辨率:200万像素 * 低噪声:GC02M1具有低噪声特点,...

    格科微 GC4663 datasheet

    下面是 GC4663 的详细知识点总结: Sensor Overview GC4663 是一款高性能的 CMOS 图像传感器,具有高品质的图像捕获能力。该传感器具有 1/3 英寸大小,4 百万像素的高分辨率,能够满足各种图像捕获应用的需求。 ...

    gc0310 前置摄像头驱动

    总之,gc0310前置摄像头驱动是连接高通msm8909平台硬件与Android系统的关键组件,涉及到了硬件接口、内核编程、设备树配置、以及Android相机框架等多个方面的技术知识。通过理解和调试这个驱动,开发者可以深入理解...

    JVM GC原理深入学习.pdf

    因为篇幅所限,可能有部分知识点没有完全展开,但是对于GC领域的核心知识点几乎全部涵盖,很难在其他书籍和文档中涉及如此全面的内容。 本文档所涉及的知识点,以JVM GC为主要内容。同时,为了能更深入理解与之相关...

    GC4663 DATASHEET

    根据提供的文档内容,我们可以梳理出关于GC4663数据手册的相关知识点如下: 1. 传感器概述: 1.1 通用描述: GC4663是一款高质量的400万像素CMOS图像传感器,适用于安全摄像头、数码相机产品以及手机摄像头应用。该...

    gc0310 mipi 驱动

    【知识点详解】 1. **MIPi接口**:MIPi是一种低功耗、高带宽的串行接口,专为移动设备设计,可以提供比并行接口更高的数据传输速度,同时减少引脚数量和线缆复杂性。MIPi有多种类型,包括CSI(Camera Serial ...

    摄像头gc2145资料.rar

    本文将深入探讨GC2145的核心知识点,包括寄存器初始化配置和数据手册,以及如何利用C语言进行编程。 一、GC2145概述 GC2145是一款高性能、低功耗的CMOS图像传感器,具备高分辨率和高帧率特性,能够捕捉清晰的动态...

    GC9106_DS_V1.0_20170308(1).pdf

    根据给定的文件信息,以下是对GC9106芯片datasheet中包含的SPI接口的驱动初始化代码相关的知识点的详细说明: ### 标题和描述知识点 1. **GC9106芯片介绍**: - GC9106是格科公司生产的一款单芯片驱动器,专为TFT...

    JVM-GC全面知识系统详解

    GC全面知识系统详解涵盖了JVM内存结构、垃圾回收机制、类加载与字节码技术以及内存模型等多个重要主题。 首先,我们来探讨JVM的内存结构。JVM内存主要分为堆内存和栈内存两大部分。堆内存是所有线程共享的一块区域...

    GC9503V-DS IC规格书

    以下是对GC9503V的关键知识点的深入解析: 1. **功能特性**:GC9503V可能具备多种显示模式支持,如RGB、LVDS、MIPI等,能够适应不同类型的显示屏。同时,它可能具有图像处理能力,如色彩空间转换、缩放、伽马校正等...

    GC-powerstation 9.1.2

    "GC-powerstation 9.1.2" 是一个专门针对垃圾收集(Garbage Collection, GC)优化的工具或平台的版本号。...同时,了解不同GC策略的工作机制以及如何分析GC日志,也是优化过程中必不可少的知识点。

    GC2093 CSP Datasheet Beta0.3 .pdf

    以下是关于GC2093的详细知识点: ### 1. 产品概述 GC2093是一款1/2.9英寸的2百万像素CMOS图像传感器,它包含了1920H x 1080V像素阵列、10位ADC(模数转换器)以及图像信号处理器。这种全面集成的高性能低功耗设计...

    gc2145 mipi 驱动

    《GC2145 MIPI驱动详解:在MTK Android 4.4系统中的应用与配置》 在Android操作系统中,驱动程序是连接硬件设备...通过理解并熟练掌握这些知识,开发者可以有效地定制和优化GC2145在不同平台上的表现,提升用户体验。

    STC15W104+GC9106 SPI串口3线驱动彩屏代码.zip_9106_STC15W104驱动oled_gc9106引脚

    在本文中,我们将深入探讨如何使用STC15W104微控制器通过SPI串口3线协议驱动GC9106彩色显示屏,并实现彩屏的滚动显示效果。...通过理解和掌握这些知识点,我们可以开发出更丰富、更具交互性的嵌入式显示应用。

    岛津GC-MS基础知识.ppt

    岛津 GC-MS 基础知识 岛津 GC-MS 基础知识是指 Gas Chromatograph-Mass Spectrometer 的基础知识,GC-MS 是一种气相色谱/质谱联用仪,能够进行高效、快速和灵敏的样品分析。 GC-MS 由气相色谱(Gas Chromatograph...

Global site tag (gtag.js) - Google Analytics