程序在运行过程中,会产生大量的内存垃圾(一些没有引用指向的内存对象都属于内存垃圾,因为这些对象已经无法访问,程序用不了它们了,对程序而言它们已经死亡),为了确保程序运行时的性能,java虚拟机在程序运行的过程中不断地进行自动的垃圾回收(GC)。关于 JVM 的 GC 算法主要有下面四种:

1、引用计数算法(Reference counting)

每个对象在创建的时候,就给这个对象绑定一个计数器。每当有一个引用指向该对象时,计数器加一;每当有一个指向它的引用被删除时,计数器减一。这样,当没有引用指向该对象时,该对象死亡,计数器为0,这时就应该对这个对象进行垃圾回收操作。

2、标记–清除算法(Mark-Sweep)

为每个对象存储一个标记位,记录对象的状态(活着或是死亡)。

分为两个阶段,一个是标记阶段,这个阶段内,为每个对象更新标记位,检查对象是否死亡;第二个阶段是清除阶段,该阶段对死亡的对象进行清除,执行 GC 操作。

3、标记–整理算法

标记-整理法是标记-清除法的一个改进版。同样,在标记阶段,该算法也将所有对象标记为存活和死亡两种状态;不同的是,在第二个阶段,该算法并没有直接对死亡的对象进行清理,而是将所有存活的对象整理一下,放到另一处空间,然后把剩下的所有对象全部清除。这样就达到了标记-整理的目的。

4、复制算法

该算法将内存平均分成两部分,然后每次只使用其中的一部分,当这部分内存满的时候,将内存中所有存活的对象复制到另一个内存中,然后将之前的内存清空,只使用这部分内存,循环下去。

这个算法与标记-整理算法的区别在于,该算法不是在同一个区域复制,而是将所有存活的对象复制到另一个区域内。

5、JVM不同的版本垃圾回收机制不一样,jdk1.7和1.8新版本和老版本区别

jdk1.7和1.8旧版本Parallel Old,(老年代)

jdk1.7和1.8新版本Parallel Scavenge,(新生代)

Parallel Old 收集器

Parallel Scavenge收集器的老年代版,使用多线程与标记–整理算法。这个收集器在jdk1.6中才开始提供的,直到Parallel Old 收集器出现后,“吞吐量优先”收集器终于有了比较名副其实的应用组合,在注重吞吐量以及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge加 Parallel Old收集器

Parallel Scavenge收集器

Parallel Scavenge收集器是一个新生代的手机器,使用的是复制算法的收集器,而且也是多线程的收集器。。Parallel Scavenge收集器,目标达到一个可控制的吞吐量,使用-XX:MaxGCPauseMillus参数控制垃圾停顿时间,使用-XX:GCTimeRatio参数控制吞吐量。Parallel Scavenge收集器设置-XX:UseAdaptiveSizePolicy参数,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大吞吐量(GC自使用的调节策略)。

自适应调节策略也是Parallel Scavenge收集器和ParNew收集器一个重要的区别。

————————————————

最新文章

  1. 【iOS自定义键盘及键盘切换】详解
  2. div+css进度条
  3. Linux学习笔记(20) Linux系统管理
  4. cxf的soap风格+spirng4+maven 服务端
  5. CSS 实现加载动画之八-圆点旋转
  6. BZOJ3651 : 网络通信
  7. Oracle index hint syntax
  8. 深入理解计算机系统第二版习题解答CSAPP 2.17
  9. Android 布局优化 -- 学习笔记
  10. 201521123093 java 第一周总结
  11. Video Target Tracking Based on Online Learning—TLD多目标跟踪算法
  12. 【Luogu3808】多项式乘法FFT(FFT)
  13. ORM对象关系映射之使用GreenDAO进行CRUD操作
  14. UITableView设置单元格选中后只显示一个打勾的三种简单方法(仅供参考)
  15. Mac下安装git
  16. Toggle组件切换开关,控制开关图片显示与隐藏
  17. day048 BOM和DOM
  18. 学习MFC的建议
  19. ASP.NET MVC5+EF6+LayUI实战教程,通用后台管理系统框架(4)- 漂亮的登录界面
  20. MySql 常见错误代码大全

热门文章

  1. SpringCloud学习(二)服务消费者(rest+ribbon)(Finchley版本)
  2. [转帖]k8s.gcr.io/pause的作用
  3. Oracle系统权限与对象权限
  4. 【2018】Python面试题【web框架】
  5. 记一次Sqoop抽数据异常
  6. [SDOI2013]直径 题解
  7. [转载]VS2005的工程用VS2010打开后,用VS2005不能打开的解决方法
  8. centos 配置rsync+inotify数据实时同步2
  9. django 中间键重定向
  10. 实现div可以调整高度(div实现resize)