垃圾收集算法

(1)标记清除

根据根搜索确定对象是否已死,已死对象标记,然后一起清除。

这个其实不算什么算法,最正常想法应该就是这样。但是,缺点

是效率不高,如果有很多不连续的小对象需要回收,会花好多时间

。另外,造成内存碎片也是问题,分配新的对象和分配大对象不好解决。

(2)标记复制

简单的做法,把内存分成两块,内存永远在其中一块上分配。

垃圾回收时,把存活的对象复制到另一块连续分配,然后把前一块

内存全清除即可。这种方法是浪费一半内存,代价有点大。

PS:以后内存大小如果不是问题,不知道会不会用这种算法?

大多数情况下,对象的存活期应该是朝生夕灭,所以,专门留出

一半的空间来准备备份是没有必要的。

hotspot虚拟机的算法是内存分为一块大的eden空间和两块较小

的survivor空间(注意:只是新生代,不是全部内存,后面会说到新生代)

其中一块survivor用作备份存活对象,eden和survivor可以用来分配内存。

这样浪费的空间就只有一个survivor。

另外一个问题随之而来,并不能保证存活下的对象全能被一个survivor容纳。

不能容纳的对象必须有别的内存来担保,这个工作是由老生代担当的。

从名字也可以看出老生代存放的是存活周期比较老的对象。

(3)标记整理算法

佩服这个算法的创造者┏ (^ω^)=☞

老生代没有额外的担保空间,但是又需要垃圾回收,聪明的人想到了办法。

每次垃圾回收时,把存活的对象向内存的另一侧移动,然后清除回收前的起点到

另一侧占用的边界之间的内存。

(4)分代收集算法

把内存分为新生代和老生代。新生代用的是复制算法,

老生代用的是标记整理算法。作者把分代算法和前面三种算法

并列,感觉不是一个层次的东西。计算机书籍,理解即可。

最新文章

  1. js获取IP和MAC地址
  2. Timeline Portfolio - 时间轴作品集效果
  3. [LintCode] Add Binary 二进制数相加
  4. HTML图像映射
  5. TYVJ P1090 母舰 Label:模拟,题目看清就好
  6. 用AngularJS开发的过程中如何查看Scope内容
  7. Win10正式版激活方法有哪些?如何激活Win10?
  8. 《Apache负载均衡》RHEL6
  9. Java知识点:javac命令
  10. RHEL 7特性说明(七):编译程序及工具
  11. eclipse启动不了报错java was started but returned exit code=13
  12. Android中程序包的相关操作
  13. Ajax中参数带有html格式的 传入后台保存【二】
  14. 将控制台信息显示在前台页面的js插件
  15. hadoop小知识札记
  16. SpringBoot+Shiro入门小栗子
  17. 二叉排序树类的: C++ 实现
  18. cookie 简单用法
  19. tomcat的安装及配置
  20. 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法

热门文章

  1. xcode自动打ipa包脚本
  2. camera摄像原理之三:色温和自动白平衡【转】
  3. Python3安装cx_Oracle连接oracle数据库实操总结
  4. 【转】Spring MVC 解读——<mvc:annotation-driven/>
  5. 【 Ngnix 】配置路径转发至后端Apache多台虚拟主机
  6. 阿里云OSS C#回调服务实例代码
  7. python 如何将JSON数据原封不动的转为字符串(顺序不能变动)?
  8. 虚拟机vmware下安装Ghost XP——正确的解决方案
  9. springboot hystrix turbine 聚合监控
  10. js处理富文本编辑器转义、去除转义、去除HTML标签