做有温度的教育!
全国统一咨询热线:400-803-9399
北京
校区
新闻资讯> 技术分享> 分代收集算法

分代收集算法

时间:2018-11-13
浏览:4414
发布:甲骨文华育兴业
赞:651

  当前商业虚拟机的垃圾收集都采用“分代收集”(Generational Collection)算法,这种算法并没有什么新的思想,只是根据对象存活周期的不同将内存划分为几块。一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适合的收集算法。在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成。而老年代中因为对象存活率高、没有额外空间对他进行分配担保,就必须使用“标记-清理”或者“标记-整理”算法来进行回收。

  在Java虚拟机分代垃圾回收机制中,应用程序可用的堆空间可以分为年轻代与老年代,然后年轻代有被分为Eden区,From区与To区。

甲骨文华育兴业


  当系统创建一个对象的时候,总是在Eden区操作,当这个区满了,那么就会触发一次YoungGC,也就是年轻代的垃圾回收。

  一般来说这时候不是所有的对象都没用了,所以就会把还能用的对象复制到From区。  

甲骨文华育兴业

  这样整个Eden区就被清理干净了,可以继续创建新的对象,当Eden区再次被用完,就再触发一次YoungGC,然后呢,注意,这个时候跟刚才稍稍有点区别。这次触发YoungGC后,会将Eden区与From区还在被使用的对象复制到To区,

甲骨文华育兴业

  再下一次YoungGC的时候,则是将Eden区与To区中的还在被使用的对象复制到From区。  

甲骨文华育兴业

  经过若干次YoungGC后,有些对象在From与To之间来回游荡,这时候From区与To区亮出了底线(阈值),这些家伙要是到现在还没挂掉,对不起,一起滚到(复制)老年代吧。  

甲骨文华育兴业

  老年代经过这么几次折腾,也就扛不住了(空间被用完),好,那就来次集体大扫除(Full GC),也就是全量回收,一起滚蛋吧。

  全量回收呢,就好比我们刚才比作的大扫除,毕竟动做比较大,成本高,不能跟平时的小型值日(Young GC)相比,所以如果Full GC使用太频繁的话,无疑会对系统性能产生很大的影响。

  所以要合理设置年轻代与老年代的大小,尽量减少Full GC的操作


人生从业之路的第一步,从甲骨文华育兴业开始,

背后付出的辛苦与努力只有自己知道,而这也只是职业生涯的开始。

勤恳努力的人终会得到最好的回报,有些努力需要时间来回答

你吃的苦终会铺成你想要的路!

甲骨文华育兴业,为你的IT之路开启梦想之门!


【版权与免责声明】如发现内容存在版权问题,烦请提供相关信息联系我们,我们将及时沟通与处理。本站内容除非来源注明甲骨文华育兴业,否则均为网友转载,涉及言论、版权与本站无关

相关推荐

java开发培训

Java集合类框架的基本接口有哪些

在JAVA开发中框架给我们提供了很多方便的接口,但是接口到底是什么呢?在开发中又起到了什么作用呢,这就是我们今天需要了解的!

java开发培训

内存模型是怎么解决缓存一致性问题的?

由于CPU和主存的处理速度上存在一定差别,为了匹配这种差距,提升计算机能力,人们在CPU和主存之间增加了多层高速缓存。每个CPU会有L1、L2甚至L3缓存,在多核计算机中会有多个CPU,那么就会存在多套缓存,那么这多套缓存之间的数据就可能出现不一致的现象。为了解决这个问题,有了内存模型。内存模型定义了共享内存系统中多线程程序读写操作行为的规范。通过这些规则来规范对内存的读写操作,从而保证指令执行的正确性。

大数据开发

hadoop的I/O操作

hadoo用户希望系统在存储和处理数据时不会丢失或损坏任何数据,这样数据的完整性就显得尤为重要。HDFS会对写入的所有数据计算校验和并在读取数据时验证校验和,其实HDFS存储着每个数据块的复本,一旦校验数据损坏,就将损坏的数据复制到另一个datanode,然后将这个数据的复本复制到当前需要读取的datanode上,一旦数据读取成功,就将已损坏的数据块删除。hadoop的LocalFileSystem执行客户端的校验和验证,它是通过ChecksumFileSystem来完成自己的任务。   三、压缩   文件压缩与两大好处,减少存储文件所所需要的磁盘空间,并加速数据在网络上的传输,多于大数据量时就就显得更加的重要。压缩的格式有很多种,各有千秋,gzip是一个通用的压缩工具,因为在空间和时间性能上都是比较均衡的。   java中已经提供的API,实现codec接口来完成的一种压缩-解压缩的算法。   前面也说到了,有的压缩格式是不支持输入分片的,也就是说是否可以搜索数据流的任意位置并进一步往下读取数据。很明显gzip是不行的,但是bzip2是可以的,对于MapReduce这种需要分片读取的时候选择什么样的压缩方式就显得尤为重要。   四、序列化   序列化指的是将结构化对象转化为字节流以便在网络上传输或写到磁盘进行永久存储的过程,反序列化是指将字节流转回结构化对象的逆过程。hadoop使用的是自己的序列化格式Writable,它绝对紧凑、速度快,但是不太容易用java以外的语言进行扩展或使用。基于“接口定义语言”(Interface Description Language IDL)的序列化框架有Apache Thrift和Google Protocol Buffers是两个比较流行的序列化框架。   五、Apache Avro   Apache Avro是一个独立于编程语言的数据序列化系统,是由Doug Cutting创建,旨在解决hadoop中Writable类型的不足:缺乏语言的可移植性。拥有一个可以被多种语言处理的数据格式与绑定到单一语言的数据格式相比,前者更易于与公众共享数据集,同时也更具有生命力,该语言将使得数据具有更长的生命周期,即时原先用于读/写该数据的语言已经不再使用。与上面的两种框架相比,Avro数据是与语言无关的模式定义的,但是与其他系统不同的是,代码生成是可选的,并且Avro的模式通常用JSON来写,当然还有一种高级语言称为Avro IDL,可以使用C语言编写。

大数据开发

redis持久化与主从复制

缺省情况情况下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump.rdb。你可以配置Redis的持久化策略,例如数据集中每N秒钟有超过M次更新,就将数据写入磁盘;或者你可以手工调用命令SAVE或BGSAVE。

大数据中hadoop是什么? ps使用 大数据 冲刺Java架构师年薪50W

友情链接: 甲骨文华育兴业哈尔滨校区 甲骨文华育兴业长春校区 魔据教育 音乐培训 青海律师

Copyright ©2016-2019. All Rights Reserved. 京ICP备17018991号-4

网站地图