JVM的四种GC算法
程序在运行过程中,会产生大量的内存垃圾(一些没有引用指向的内存对象都属于内存垃圾,因为这些对象已经无法访问,程序用不了它们了,对程序而言它们已经死亡),为了确保程序运行时的性能,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收集器一个重要的区别。
————————————————
最新文章
- 【iOS自定义键盘及键盘切换】详解
- div+css进度条
- Linux学习笔记(20) Linux系统管理
- cxf的soap风格+spirng4+maven 服务端
- CSS 实现加载动画之八-圆点旋转
- BZOJ3651 : 网络通信
- Oracle index hint syntax
- 深入理解计算机系统第二版习题解答CSAPP 2.17
- Android 布局优化 -- 学习笔记
- 201521123093 java 第一周总结
- Video Target Tracking Based on Online Learning—TLD多目标跟踪算法
- 【Luogu3808】多项式乘法FFT(FFT)
- ORM对象关系映射之使用GreenDAO进行CRUD操作
- UITableView设置单元格选中后只显示一个打勾的三种简单方法(仅供参考)
- Mac下安装git
- Toggle组件切换开关,控制开关图片显示与隐藏
- day048 BOM和DOM
- 学习MFC的建议
- ASP.NET MVC5+EF6+LayUI实战教程,通用后台管理系统框架(4)- 漂亮的登录界面
- MySql 常见错误代码大全
热门文章
- SpringCloud学习(二)服务消费者(rest+ribbon)(Finchley版本)
- [转帖]k8s.gcr.io/pause的作用
- Oracle系统权限与对象权限
- 【2018】Python面试题【web框架】
- 记一次Sqoop抽数据异常
- [SDOI2013]直径 题解
- [转载]VS2005的工程用VS2010打开后,用VS2005不能打开的解决方法
- centos 配置rsync+inotify数据实时同步2
- django 中间键重定向
- 实现div可以调整高度(div实现resize)