• GC的两种判定方法

(1) 引用计数法

给对象添加一个引用计数器,每当引用一次+1,每次失效时-1,当计数器为0时,表示对象就是不可能再被使用的。

(2) 可达性分析算法

将“GC Roots”对象作为根节点,开始向下搜索,所走过的路径成为引用链。当一个对象到GC Roots没有任何引用链时,说明此对象是不可用的。

  • 能作为GC Roots的对象

(1) 虚拟机栈中引用的对象

(2) 方法区中静态属性引用的对象

(3) 方法区中常量引用的对象

(4) 本地方法栈中JNI引用的对象

  • GC的收集方法

(1) 标记清除算法

              过程: * 标记阶段:先通过根节点,标记所有从根节点开始的可达对象,未被标记的视为垃圾对象

* 清除阶段:清除所有未被标记的对象

缺点: * 效率问题,标记和清除两个过程的效率都不高

* 空间问题,会产生大量不连续的内存碎片

(2) 复制算法

              过程: * 将原有的内存空间分成两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中存活对对象复制到未使用的内存块中,然后清除正在使用的内存块中所有对象

缺点: * 浪费一半的内存

* 如果对象的存活率很高,复制要花很长时间

(3) 标记整理算法

               过程: * 标记阶段:先通过根节点,标记所有从根节点开始的可达对象,未被标记的视为垃圾对象

* 整理阶段:将所有的存活对象压缩到内存的一端(或向另一端移动),之后清理边界所有的空间

缺点: * 效率也不高,不仅要标记存活对象,还要整理它们的引用地址

最新文章

  1. Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制
  2. React-Native 之控件布局
  3. RMAN-06059: expected archived log not found, loss of archived log compromises recoverability
  4. Android udev /dev 设备节点权限
  5. [Javascript] Object.freeze() vs Object.seal()
  6. Json部分知识(前台显示格式、Json-lib日期处理)
  7. ORA-07445 [mdagun_iter+957] When Using SDO_AGGR_UNION 问题处理
  8. SSDT表详解
  9. 《InsideUE4》UObject(四)类型系统代码生成
  10. linux-ubuntu下fastQC的安装
  11. Linux(3)用户和权限管理
  12. nginx学习笔记(三)
  13. read_csv报错Initializing from file failed
  14. 开关Windows休眠功能
  15. 发送邮件--MFMailComposeViewController
  16. PAT B1029 旧键盘 (20 分)
  17. 2017-2018-2 《网络对抗技术》 20155310 第二周 Exp1 PC平台逆向破解(5)M
  18. DotNetBar 使用笔记
  19. Linux kernel pwn notes(内核漏洞利用学习)
  20. android activity 窗口 样式

热门文章

  1. UVa 1009 Sharing Chocolate (数位dp)
  2. FastDFS整合nginx模块报错
  3. 【Java】Java URLDecoder异常Illegal hex characters in escape (%)
  4. github配置和使用
  5. 有关于log4j详解
  6. 解决Windows2003 Server终端服务120天限制
  7. ORACLE修改表字段顺序
  8. SecondContract 接口类
  9. vue2.0 之 douban (七)APP 打包
  10. Vmware 15 新建虚拟机黑屏