文档章节

四、垃圾收集之垃圾收集算法

Swimmer
 Swimmer
发布于 2016/12/07 08:45
字数 558
阅读 18
收藏 0

一、标记-清除算法

  1. 最基础的收集算法,其余的算法基本都是由此算法改进得来
  2. 效率不高,标记和清除的过程效率都不高
  3. 清除之后会产生大量的不连续的内存碎片

 

二、复制算法

  1. 为了解决标记-清除算法的效率问题而出现的复制算法
  2. 将内存分为两块,一个半区用于放对象,另一个半区是空的
  3. 垃圾回收时将放置对象的半区中未被标记死亡的对象放到空半区
  4. 这样的好处在于实现简单,运行高效
  5. 缺点是牺牲了一般的内存空间,代价太大

 

三、现在的复制算法

  1. HotSpot虚拟机采用Eden-Survivor分区的方式
  2. 将内存分为Eden空间和两块Survivor空间,大小为8 : 1 : 1
  3. 回收时将Eden空间和一块Survivor空间中还存活的对象复制到另一个Survivor空间中
  4. 这样做的原因是因为:98%的新生代都是“朝生夕死”的,所以每次回收的时候可以将存活的对象放到较小的一块区域
  5. 当另一块Survivor空间没有大小不够时,虚拟机会通过分配担保机制将这些对象划进老年代

四、标记-整理算法

  1. 在老年代中一般都是存活时间比较长的对象,所以不适合使用复制算法进行回收(基本不会“朝生夕死”)
  2. 标记-整理算法会将所有存活的的对象都像一端移动,然后清理掉边界以外的内存

五、分代回收算法

  1. 当前商业虚拟机的垃圾收集都采用分代回收算法
  2. 将内存划分为几块,一般是把java堆分成新生代和老年代,根据各个年龄代的特点,选择不同的算法进行回收
  3. 新生代一般是“朝生夕死”,所以采用复制算法,高效且不需要很大的空闲内存
  4. 老年代的对象存活率高,所以使用标记-清除算法或者标记-整理算法

© 著作权归作者所有

共有 人打赏支持
Swimmer
粉丝 2
博文 30
码字总数 12958
作品 0
朝阳
程序员
私信 提问
JAVA垃圾回收机制概要

垃圾回收是JAVA中的一个大知识点,也是一个著名知识点,毕竟JAVA号称自己先进性的时候总是会带上垃圾回收。于是,它也成了面试中的常客,面试官动不动的就要你解释下什么是垃圾回收,以及它的...

文艺小青年
2017/06/01
0
0
JVM学习之:GC的算法的具体实现(垃圾收集器)

在 JVM学习之:GC的算法简述 这篇博客中提到了各种各样的垃圾算法,由于java屏蔽掉了程序员对内存的管理,其根据这些算法的特点实现了很多的的垃圾收集器,每个垃圾收集器都有自己的优点,使用场合...

sun7545526
2012/08/15
0
0
Java虚拟机学习(四)

垃圾回收(Garbage Collection, GC)主要需要考虑的问题: 哪些内存需要回收? 什么时候回收? 如何回收? 哪些内存需要回收 虚拟机栈、本地方法栈、程序计数器由于是线程独有,且栈帧的内存...

casoc
2016/05/30
56
0
Java程序员从笨鸟到菜鸟之(九十五)深入java虚拟机(四)——java虚拟机的垃圾回收机制

Java语言从出现到现在,一直占据编程语言前列,他很大的一个原因就是由于java应用程序所运行的平台有关。我们大家都知道java应用程序运行在java虚拟机上。这样就大大减少了java应用程序和底层...

长平狐
2012/11/12
165
0
垃圾收集器与内存分配策略-深入理解jvm

最近学习了周志明老师的《深入理解Java虚拟机》,收获颇多,留下一些学习笔记,供以后复习用。 一.学习目标 1.对象存活判断 2.GC(garbage collection)算法学习 3.垃圾回收器 4.内存分配与回...

Swen_9826
2018/08/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
8
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
3
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
2
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
1
0
RabbitMQ学习(2)

1. 生产者客户端 void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) 1. 在生产者客户端发送消息时,首先......

江左煤郎
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部