我再说一下什么是磁盘碎片化,磁盘碎片化表示删不干净,比如我格式化磁盘,肯定效率高一点,而且删的干净一点,如果一个一个的删除的话,容易产生碎片,有一部分没有被删除掉,你们可以下去自己做一个例子,有的时候删不干净,就会产生碎片化的问题,我们再讲一个算法,叫复制算法,复制算法是怎么来的呢,复制算法要讲到堆内存的划分,新生代和老年代,左边叫新生代,右边可以理解为老年代,新生代里面存的是什么对象,刚出生不久的对象,老年代是被垃圾回收机制回收很多次已经非常稳定的,经常使用的对象就会存在老年代里面,在新生代里面会分为这几个区域,第一个区域叫做EDEN区域,S0区和S1区,或者from区和to区,S0区和S1区大小是相等的,为什么相等的,为什么S0区和S1区大小要相等呢,是因为这个原因,叫做复制算法,首先我们来举一个例子,假如我们创建一个对象叫做user1,第一次要放到什么区里面去,我先做创建了一个user1对象,它是要放在EDEN区,还是S0区还是S1区呢,是EDEN区是吧,user1对象会放在EDEN区里面,这个时候我们来了一个user2对象,user2对象是放在EDEN对象还是S0区,还是S1区,一样的,他也会存在EDEN区里面,如果我们这个GC线程进行回收的时候,发现你们的user1和user2会被经常使用到,你们觉得这个时候会进入到什么区里面去,就是GC线程发现user1和user2经常被使用的情况下,会存放到什么区里面去,记住不是老年代,阀值必须要达到15次以上,比如这个时候我只是达到7,8次的时候,他一般会到from区或者to区,user1,user2一般先到S0区的,这个时候我再来个对象叫做user3,我来了一个叫做user3对象,他是到哪个区里面去,EDEN区是吧,这个时候user3对象到EDEN区里面去,同样的道理,如果发现EDEN区的user3经常被使用,那么他就会进入到哪个区里面去,是不是S0区,同样是到S0区,那么这个时候垃圾回收机制,发现你的user1和user2没有被经常使用,是一个不可达对象的情况下,这个时候怎么办,比如user1不可达了,垃圾回收机制发现user1不可达了,就是没有被经常使用的情况下,但是user2和user3仍然被使用的情况下,怎么办呢,这个时候就会把user2,user3 copy到S1里面去,copy到S1里面去的时候,然后直接把整个S0区给直接清除掉,记住是清除所有的,然后把user2和user3 copy到S1里面去,清除S0的所有,清除的非常非常干净,这就叫复制算法,这个时候S0就没有任何数据的,接着我再来一个对象,叫做user4对象,你们说看一下user4是存放在哪一个区域,EDEN区,这个时候user4对象会存放在eden区里面,如果垃圾回收器发现eden区的user4对象经常被使用,这个时候user4对象会晋升到哪个区里面去,是进入到S0区还是S1区呢,user4会晋升到S1区里面去,S0区是没有任何数据的,是S1区,有人说user4对象不会放到S0区,偏偏要放到S1区呢,这个时候我就告诉你们,就是能够做复制,记住一点,S0区和S1区一定有一个为空的,他的目的是什么意思啊,目的是为了存放下一个复制,比如这个时候我进行回收的时候,user2和user3没有继续使用的情况下,那这个时候怎么办,user4对象还是会被继续使用的,user4对象会被放到S0区里面去,然后清除所有的S1区,目的是为了做下一次的切换,这就叫做复制算法,这种算法有什么优点,优点是能够解决碎片化的问题,而且快速,清理干净,缺点是浪费空间,比如我们建一个文件夹S0,然后建立一个文件夹S1,S0和S1的大小是相等的,我在S0区建一个对象,叫做user0,然后这个时候再来一个对象叫做user1,当我进行回收的时候,S1区是空的,我发现user0没有被经常使用的情况下,user1还是被继续使用,把它copy到S1区来,然后我直接把S0区的文件全部给删除掉,这就叫复制算法,这就相当于S0就是空的,S1是不是有数据了他的目的是做删除的比较快一点,可以解决碎片化的问题,这个时候我再来一个对象叫做user2的话,它是存放在S0区还是S1区呢,肯定是S1区,同样道理,你们现在去看,垃圾回收机制进行回收的时候,S1区的user1对象没有被经常使用的情况下,我就把S1区的user2对象复制到S0区来,然后把整个的S1区给清掉,是不是可以解决碎片化的问题,移动其实也相当于剪切一样的,你们说复制可能更好一点移动其实也算是复制,相当于copy一份,我先把存活对象放在另一个区里面,GC回收将可达的对象复制到下一个区域,然后直接删除当前的区域,你们觉得复制算法一般用在哪个年代里面呢,是用在新生代还是用在老年代里面呢,是新生代还是老年代,这肯定是新生代里面的,如果你在EDEN区直接不可达,那就直接删掉了,不会进入到S0或者S1区的,如果在S0或者S1区经历了15次以上,肯定会到老年代里面去的,有的地方吧S0叫做from区,把S1叫做to区,都是一个意思,to区就是S1区

垃圾回收机制之复制算法相关推荐

  1. jvm垃圾回收机制和常见算法

    这是朋友给的面试题里边的,具体地址已经找不到,只能对原作者说声抱歉了: 理论上来讲sun公司只定义了垃圾回收机制规则,而步局限于其实现算法,因此不同厂商生产的虚拟机采用的算法也不尽相同. GC(Gar ...

  2. JVM 垃圾回收机制和常见算法

    理论上来讲 Sun 公司只定义了垃圾回收机制规则而不局限于其实现算法,因此不同厂商生产的虚拟机采用的算法也不尽相同. GC(Garbage Collector)在回收对象前首先必须发现那些无用的对象, ...

  3. java gc 可达性_JAVA--GC 垃圾回收机制----可达性分析算法

    在JVM 中,java 为我们提供可有效的垃圾回收机制,GC ,GC的创建无疑是为了缓解内存压力.保存有效数据.回收垃圾无效数据: 在此之前GC在我的理解中,一直只是个概念,内存中出现垃圾,GC来回收 ...

  4. 【JVM进阶之路】垃圾回收机制和GC算法之三色标记(三)

    JVM往期文章 [JVM进阶之路]内存结构(一) [JVM进阶之路]玩转JVM中的对象(二) 上篇文章中讲到JVM中的对象以及判断对象的存活,那么对于"已死"的对象应该如何处理,怎 ...

  5. JVM虚拟机(四):JVM 垃圾回收机制概念及其算法

    垃圾回收概念和其算法 谈到垃圾回收(Garbage Collection)GC,需要先澄清什么是垃圾,类比日常生活中的垃圾,我们会把他们丢入垃圾箱,然后倒掉.GC中的垃圾,特指存于内存中.不会再被使用 ...

  6. 【Java 虚拟机原理】垃圾回收算法 ( Java 虚拟机内存分区 | 垃圾回收机制 | 引用计数器算法 | 引用计数循环引用弊端 )

    文章目录 一.Java 虚拟机内存分区 二.垃圾回收机制 三.引用计数器算法 ( 无法解决循环引用问题 ) 一.Java 虚拟机内存分区 Java 虚拟机内存分区 : 所有线程共有的内存区域 : 堆 ...

  7. java垃圾回收机制_笔记 | Java垃圾回收机制

    本文经授权转载自程序员杂货铺(ID:speakFramework) 垃圾回收 最近上海的小伙伴是不是要被强垃圾分类搞疯了???哈哈哈哈 上海是个走在前列的城市啊,不光骑自行车闯红灯要被罚钱,垃圾不分类 ...

  8. 深入理解 Java 垃圾回收机制

    转载自 http://www.cnblogs.com/andy-zcx/p/5522836.html 深入理解 Java 垃圾回收机制 一:垃圾回收机制的意义 java  语言中一个显著的特点就是引入 ...

  9. 深入理解java垃圾回收机制

    一.垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理.由于有个垃圾回收机制 ...

最新文章

  1. 【Python】青少年蓝桥杯_每日一题_10.11_小球反弹
  2. xy坐标正负方向_道路施工图纸上x坐标和y坐标分别代表什么方向,哪个代表南北方向,哪个代表东西方向?...
  3. Windows7配置GPU和Theano编程环境
  4. 作家百态之一:作家、批评家与酒
  5. html语言dl与ul,HTML中DL、UL、OL用哪个比较好
  6. 判断奇偶性 大数(高精度)
  7. 相机下载_佳能相机如何连接手机传输相片,视频?
  8. Ubuntu系统中各种文件颜色的含义
  9. VMware Workstation “The Msi Failed”解决方法
  10. 利用高斯金字塔制作图像显著图
  11. 关于SVN提交注释的问题
  12. 【SpringBoot_ANNOTATIONS】组件注册 02 @ComponentScan 自动扫描组件 指定扫描规则
  13. svn删除远程文件和忽略文件
  14. win7计算机摄像头怎么打开,win7的摄像头在哪里打开 怎么打开win7摄像头
  15. 武汉大学计算机学院 优秀夏令营,武汉大学计算机学院2016年优秀大学生暑期夏令营活动实施方案...
  16. Java基础知识(七) 输入输出流
  17. csv文件转换成xlsx文件方法
  18. 7-214 泰勒级数展开近似sin(x)的值7-215 求班级平均分7-216 同数异形体
  19. Mac M1 使用conda安装jupyter notebook
  20. littlefs系列:重要的数据结构

热门文章

  1. [00004]-[2015-07-16]-[00]-[VC++ 开发Activity控件基础]
  2. vfs管理下的linux文件系统
  3. [WCF权限控制]利用WCF自定义授权模式提供当前Principal[实例篇]
  4. 基于DSP的汽车减震弹簧故障诊断仪的设计
  5. 计算机的世界:[-bit之魂-]
  6. 阿里1682亿背后的协同研发云——云效公共云正式商业化
  7. dubbo应用程序的单元测试环境搭建(springtest,powermock,mockito)
  8. 备份MySQL数据库的命令
  9. 在WPF程序中打开网页:使用代理服务器并可进行JS交互
  10. 集存款(复利单利)贷款为一体的计算器(最新版)