java垃圾回收算法之-coping复制
来源:互联网 发布:淘宝咖啡店 编辑:程序博客网 时间:2024/06/16 08:08
之前的java垃圾回收算法之-标记清除 会导致内存碎片。下文的介绍的coping算法可以解决内存碎片问题。
概述
如果jvm使用了coping算法,一开始就会将可用内存分为两块,from域和to域, 每次只是使用from域,to域则空闲着。当from域内存不够了,开始执行GC操作,这个时候,会把from域存活的对象拷贝到to域,然后直接把from域进行内存清理。
应用场景
coping算法一般是使用在新生代中,因为新生代中的对象一般都是朝生夕死的,存活对象的数量并不多,这样使用coping算法进行拷贝时效率比较高。不过jvm并不会根据新生代的特点,在应用coping算法时,并不是把内存按照1:1来划分的,这样太浪费内存空间了。一般的jvm都是8:1。
jvm将Heap 内存划分为新生代与老年代,又将新生代划分为Eden(伊甸园) 与2块Survivor Space(幸存者区) ,然后在Eden –>Survivor Space 以及From Survivor Space 与To Survivor Space 之间实行Copying 算法。
1、当Eden去满的时候,会进行young gc,把还活着的对象拷贝到Survivor From区;、
2、当Survivor 0区也慢了,则把活着的对象移到Survivor To区,Survivor From被清空
3、当Eden区再次发生young gc的时候,直接把存活的对象复制到Survivor To区
4、当Survivor To区也满的时候,又会再次把存活的对象复制到Survivor From区,如此交换15次(由JVM参数MaxTenuringThreshold决定,这个参数默认是15)
注意:
万一存活对象数量比较多,那么To域的内存可能不够存放,这个时候会借助老年代的空间。
优点
在存活对象不多的情况下,性能高,能解决内存碎片和java垃圾回收算法之-标记清除 中导致的引用更新问题。
缺点
- 会造成一部分的内存浪费。不过可以根据实际情况,将内存块大小比例适当调整;
- 如果存活对象的数量比较大,coping的性能会变得很差。
- java垃圾回收算法之-coping复制
- java垃圾回收算法之-复制算法
- 垃圾回收算法之复制算法
- 垃圾回收算法之 复制算法
- Java的垃圾回收之算法
- Java的垃圾回收之算法
- Java的垃圾回收之算法
- Java的垃圾回收之算法
- Java的垃圾回收之算法
- Java的垃圾回收之算法
- Java的垃圾回收之算法
- Java垃圾回收之根搜索算法
- Java的垃圾回收之算法
- java垃圾回收算法之-引用计数器
- java垃圾回收算法之-标记清除
- java垃圾回收算法之-标记清除
- java垃圾回收算法之-标记压缩
- 【Java虚拟机】之二 垃圾回收算法
- spring security(二)关于登陆 ----学习笔记
- jQuery的deferred对象使用详解
- 使用git遇到的一些问题
- Java虚拟机(七)虚拟机字节码执行引擎
- 微信消息类
- java垃圾回收算法之-coping复制
- redis系列--服务级别命令
- 装箱、拆箱、自定义转换
- 描述指针数组和数组指针的区别
- 使用Spring MVC统一异常处理实战
- Eclipse SVN插件的帐号、密码修改
- 二进制中1的个数
- 最长连续递增子序列
- 微信处理类