Atitit 资源清理之道与gc之道  gc算法

清理临时表  临时资源   使用的算法类型是  引用计数(reference counting),基于时间过期自动清理资源

1. 3.1. 从各种垃圾收集算法最基本的运行方式来说,大概可以分成三个类型: 1. 引用计数(reference counting): 1 3.2. 标记-清扫(mark-sweep) 2 3.3. 3. 节点复制(copying)。 分代 1

2. 常用gc方法 2

2.1. 1. MRC(MannulReference Counting手动 retain/release/autorelease语句 1 2

2.2. 2. 自动垃圾回收(GC) 1 2

2.3. 3. Arc ARC介于自动垃圾回收(GC)和手动内存管理之间。 1 2

2.4. 1.1. 记-清除算法 1 2

2.5. 1.2. 复制算法 1 2

2.6. 1.3. 标记-整理算法 2 2

2.7. 1.4. 分代收集算法 2 2

2.8. Time base gc 垃圾收集 3

3. 参考资料 3

1.  3.1. 从各种垃圾收集算法最基本的运行方式来说,大概可以分成三个类型: 1. 引用计数(reference counting): 1 3.2. 标记-清扫(mark-sweep) 2 3.3. 3. 节点复制(copying)。 分代  

2. 常用gc方法

2.1. 1. MRC(MannulReference Counting手动 retain/release/autorelease语句 1

2.2.  2. 自动垃圾回收(GC) 1

2.3.  3. Arc ARC介于自动垃圾回收(GC)和手动内存管理之间。 1

2.4. 1.1. 记-清除算法 1

2.5.  1.2. 复制算法 1

2.6.  1.3. 标记-整理算法 2

2.7.  1.4. 分代收集算法 2

如果对象的引用计数是零,那么它就是垃圾(用户程序不可到达它),并可以回收。每次修改指针引用时(比如通过赋值语句),或者当引用超出范围时,编译器必须生成代码以更新引用的对象的引用计数。如果对象的引用计数变为零,那么运行时就可以立即收回这个块(并且减少被回收的块所引用的所有块的引用计数),或者将它放到迟延收集队列中。

记-清除算法

最基础的收集算法,算法分为标记和清除两个阶段:首先标记处所有要回收的对象,在标记完成之后统一回收所有被标记的对象。它最大的不足是效率不高,还会产生大量不连续的内存碎片

复制算法

复制算法是为了解决效率问题而生的,它可以将可用内存容量划分为大小相等的两块,,每次只使用其中一块,当这一块内存用完了,就将还存活的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。这样每次会对整个半区进行GC,并且不会产生内存碎片等问题

现在的商业虚拟机大多采用这种算法来回收新生代,另外划分内存比例也不是1:1,像HotSpot默认Eden(一块Eden区)和Survivor(两块Survivor区)的大小比例为8:1,每次使用Eden和其中一块Surviovr区,也就是新生代中可用内存空间是整个新生代的90%,当回收时,将Eden和其中一块Survivor中还存活的对象一次性复制到另一块Survivor中,最后清理掉Eden和刚才用到的Survivor空间,细心的读者在这地方也许会有发现,如果复制过程那块没使用的Survivor不够用怎么办呢?这时候需要依赖老年代进行分配担保,担保成功就会将Eden和其中一块Survivor中还存活的对象移动到老年代中,担保失败就不得不在老年代触发一次垃圾回收。这地方延伸一下,新生代垃圾回收称为Minor GC,因为Java对象大多朝生夕死的特性,所以Minor GC很频繁,一般回收速度也快,而老年代垃圾回收称为Major GC/Full GC,Major GC的速度一般会比Minor GC的速度慢很多,从前面的分析过程我们可以轻易的推断,出现了Major GC,经常会伴随着一次Minor GC,但非绝对,因此我们GC的目的其实也是通过调优尽量控制减少Major GC的频率。这地方对应的垃圾收集器是Serial收集器、ParNew收集器(Serial收集器多线程版本,可与后面谈到的老年代收集器CMS进行配合工作)、Parallel Scavenge收集器。

2.8. Time base gc 垃圾收集

3. 生活中使用的垃圾处理算法是那种算法

貌似更加像引用技术,分类未有用和无用的,然后结合复制法,延迟收集

我们生活中使用的垃圾处理策略貌似是 节点复制(copying) 分代 法。。。把垃圾扔到垃圾桶应该算是复制+删除复合操作把。

4. 参考资料

Atitit。Time base gc 垃圾收集的原理与设计.docx

Atitit gc资源释放器死锁解除器 适合于游戏引擎,数据库释放 爬虫网络连接释放等.docx

Atitit 资源清理之道与gc之道 gc算法 清理临时表 临时资源 使用的算法类型是 引用计数(reference counting),基于时间过期自动清理资源 1. 3.1. 从各种相关推荐

  1. c++ 读陈黎娟的《C、C++实践进阶之道,写给程序员的编程书》所感--关于变量的类型与引用

    最近在看陈黎娟的书<C.C++实践进阶之道,写给程序员的编程书>,其中第十一章讲的是变量和类型,现做笔记如下: 数据存储区域分只读数据区(存储常量和恒值,正常情况下不做修改).全局/静态存 ...

  2. bat脚本交互输入_基于winserver操作系统的自动清理Oracle3天前归档日志脚本分享...

    概述 最近某台oracle数据库中的归档日志太多了,一天都有几十G的归档日志产生,总是提示归档空间满,导致orcle总是与服务器断开,所以就写了个定期清理Oracle归档日志的脚本,先看下整体思路. ...

  3. Unity自动清理空文件夹

    Unity 自动清理空文件夹 因为项目管控用的是Git,没法上传空文件夹.但是Unity又会对空文件夹生成相应的meta文件.导致Git提交的时候会提交这些meta文件.当项目中其他人拉下来的时候Un ...

  4. postgresql autovaccum自动清理

    为什么要开启autovaccum 在Postgresql做delete操作时,数据集(也叫做元组 (tuples))是没有立即从数据文件中移除的,仅仅是通过在行头部设置xmax做一个删除标记. upd ...

  5. 36.JVM内存分哪几个区,每个区的作用是什么、如和判断一个对象是否存活、java垃圾回收机制、垃圾收集的方法有哪些、java类加载过程、类加载机制、双亲委派、Minor GC和Major GC

    36.JVM内存分哪几个区,每个区的作用是什么? 37.如和判断一个对象是否存活?(或者GC对象的判定方法) 38.简述java垃圾回收机制? 39.java中垃圾收集的方法有哪些? 40.java类 ...

  6. pg 定时删除_postgresql AutoVacuum系统自动清理进程

    2.5.5  AutoVacuum系统自动清理进程 在PostgreSQL数据库中,对表元组的UPDATE或DELETE操作并未立即删除旧版本的数据,表中的旧元组只是被标识为删除状态,并未立即释放空间 ...

  7. 华为手机媒体音量自动静音_华为手机还能自动清理垃圾,怪不得手机越用越流畅,学到了...

    华为手机还能自动清理垃圾,难怪手机越用越流畅,学到了 很多人,都会定时给自己的手机清理内存,以确保手机流畅度. 但是手动清理有时候不能很到位,就容易收到内存不足消息提醒. 那怎么办呢?如果你用的是华为 ...

  8. Atitit mis 管理信息系统概论 艾提拉著 目录 1. 互联网三大定律 2 1.1. 摩尔定律和 2 1.2. 吉尔德定律 电脑及网络宽带资源成为重要免费资源 2 1.3. 梅特卡夫定律 用户

    Atitit mis 管理信息系统概论 艾提拉著 目录 1. 互联网三大定律 2 1.1. 摩尔定律和 2 1.2. 吉尔德定律 电脑及网络宽带资源成为重要免费资源 2 1.3. 梅特卡夫定律 用户越 ...

  9. Java垃圾回收(GC)、找垃圾的方式、GC Root、GC停顿、引用、垃圾收集算法、收集器、GC日志、安全点、安全区域

    1.垃圾回收 1.1概念 在Java语言中,垃圾回收(Garbage Collection,GC)是一个非常重要的概念. 它的主要作用是回收程序中不再被使用的内存,Java提供的GC功能可以自动监测对 ...

  10. Minor GC,Major GC,Full GC -- hotspot VM GC讲解

    针对HotSpot VM的实现,它里面的GC其实准确分类只有两大种: Partial GC:并不收集整个GC堆的模式 Young GC:只收集young gen的GC Old GC:只收集old ge ...

最新文章

  1. 一文让你完全弄懂逻辑回归和分类问题实战《繁凡的深度学习笔记》第 3 章 分类问题与信息论基础(上)(DL笔记整理系列)
  2. BZOJ2816: [ZJOI2012]网络
  3. 如何修改git已提交记录的邮箱?
  4. Git复习(七)之自定义git、忽略特殊文件、配置文件
  5. 2002: [Hnoi2010]Bounce 弹飞绵羊
  6. 分区供水条件口诀_口诀记忆 | 消防给水和消火栓系统的“月检”(重点学习)...
  7. zabbix 3.0.0beta1安装-centos6.8版本
  8. 编写JUnit测试的另一种方法(Jasmine方法)
  9. 对一篇单细胞RNA综述的评述:细胞和基因质控参数的选择
  10. CV新赛事|常见天气分类
  11. 重拾JAVA之WinForm实战之(二)
  12. (转)观点|运营做的好不好,一看系统,二看流程
  13. 菜鸟程序猿的工作心态
  14. WIN11映射NAS网络驱动器提示 用户名和密码错误
  15. 外螺纹对照表_紧固件螺纹直径与螺距对照表
  16. TS进阶之infer
  17. android监控io产生的应用,Android IO性能分析及排查
  18. 网易有数海量任务调度和智能运维实践(整理)
  19. BeanCopy 常用工具类
  20. 设置matlab图像线框,matlab在图像中画长方形(框)

热门文章

  1. java实现堆栈排序_Java代码为例讲解堆的性质和基本操作以及排序方法
  2. makefile问题:“makefile:2: *** 遗漏分隔符 。 停止。”
  3. gcc详解以及静态,动态库的生成 1
  4. 深入分析Linux自旋锁【转】
  5. 设计鲁棒性的方法:输入一个链表的头结点,逆序遍历打印该链表出来
  6. 用hudson配置持续集成CI服务器几个关键的配置
  7. 右键菜单的过滤和启动(转载)
  8. CentOS7防火墙之firewalld
  9. 2017-2018-1 20155322 20155327 实验一 开发环境的熟悉
  10. 正则表达式基础---转自 Python正则表达式指南 前边