文档章节

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

Swimmer
 Swimmer
发布于 2016/12/07 08:45
字数 558
阅读 16
收藏 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
Java程序员从笨鸟到菜鸟之(九十五)深入java虚拟机(四)——java虚拟机的垃圾回收机制

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

长平狐
2012/11/12
119
0
Java虚拟机学习(四)

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

casoc
2016/05/30
56
0
JVM学习之:GC的算法的具体实现(垃圾收集器)

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

sun7545526
2012/08/15
0
0
JAVA 垃圾收集器与内存分配策略

引言 垃圾收集技术并不是Java语言首创的,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。垃圾收集技术需要考虑的三个问题是: 哪些内存需要回收 什么时候回收 如...

jiangmitiao
2015/07/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

创建第一个react项目

sudo npm i -g create-react-app@1.5.2 create-react-app react-app cd react-apprm -rf package-lock.jsonrm -rf node_modules #主要是为了避免报错npm installnpm start......

lilugirl
今天
1
0
在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN)

Generative Adversarial Network 是深度学习中非常有趣的一种方法。GAN最早源自Ian Goodfellow的这篇论文。LeCun对GAN给出了极高的评价: “There are many interesting recent development...

naughty
今天
0
0
搬瓦工镜像站bwh1.net被DNS污染,国内打不开搬瓦工官网

今天下午(2018年10月17日),继搬瓦工主域名bandwagonhost.com被污染后,这个国内的镜像地址bwh1.net也被墙了。那么目前应该怎么访问搬瓦工官网呢? 消息来源:搬瓦工优惠网->搬瓦工镜像站b...

flyzy2005
今天
3
0
SpringBoot自动配置

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面 介绍下开发环境 JDK版本1.8 spr...

贺小五
今天
3
0
命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部