垃圾收集器2:收集算法

主要通过阅读《深入了解Java虚拟机》(周志明 著)和网络资源汇集而成,为本人学习JVM的笔记。同时,本文理论基于JDK 1.7版本,暂不考虑 1.8和1.9 的新特性,但可能初略提到。

垃圾收集算法主要有以下几种: 标记-清除算法(Mark-Sweep)、复制算法(Copying) 和 标记-整理算法(Mark-Compact)。

标记-清除算法(Mark-Sweep)

首先标记出所有需要回收的对象,标记完成后统一回收所有被标记对象。
主要不足之处:

  • 效率问题
    标记和清除两个过程的效率都不高。正如上篇笔记所记,GC会从 GC Roots 开始遍历标记,然后从 Java 堆从头到尾遍历清除垃圾。
  • 空间问题
    会产生大量不连续的空间,所以无法分配大对象,最终因为空间问题不得不提前触发 GC 动作。

复制算法(Copying)

复制算法是为了解决标记-清除算法的效率问题。

将可用内存的容量分为大小相等的两块,每次只使用其中的一块,当这一块内存使用完了,就把存活着的对象复制到另外一块上面,然后再把已使用过的内存空间清理掉。但是,这种做法的代价是将内存缩小为原来的一半

关于该算法的商业应用:
1. 目的:利用这种算法来回收新生代。
2. 方案:将内存分为 Eden 与 Survivor(有2块) 空间,比例一般为 8:1:1。每次回收将存活对象复制到一块 Survivor 空间,其他空间全部回收。
3. 空间保证(分配担保机制):因为无法保证回收存活对象的内存大小,只能依赖其他内存(指老年代)进行分配担保。
4. 代价:每次回收只有一块 Survivor 空间(10%内存)被浪费。

标记-整理算法(Mark-Compact)

在标记后不是对未标记的内存区域进行清理,二是让所有的存活对象都向一端移动,然后清理掉边界外的内存。该方法主要用于老年代

分代收集算法

将Java堆分为几个空间:

  • 新生代

      • 特点:大批对象死去,只有少量存活。
      • 算法:复制算法。
  • 老年代
      • 特点:对象存活率高,没有额外空间进行分配担保。
      • 算法:标记-清除算法/标记-整理算法。

JVM笔记(三) 垃圾收集器(2)收集算法的更多相关文章

  1. JVM笔记(二) 垃圾收集器(1)

    垃圾收集器 主要通过阅读<深入了解Java虚拟机>(周志明 著)和网络资源汇集而成,为本人学习JVM的笔记.同时,本文理论基于JDK 1.7版本,暂不考虑 1.8和1.9 的新特性,但可能 ...

  2. Spark学习之路 (十四)SparkCore的调优之资源调优JVM的GC垃圾收集器

    一.概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本 ...

  3. 【JVM】垃圾收集器和收集器的选择策略

    前言:新生代的收集器有:Serial,ParNew,Parallel Scavenge等.老年代有:CMS,SerialOld,Paraller Old等.接下来将深入理解各个垃圾收集器的原理,以及它 ...

  4. JVM垃圾收集器-ParNew收集器

    今天我给大家讲讲ParNew收集器. ParNew收集器 ParNew收集器收集器其实就是Serial收集器的多线程版本,除了使用多线程进行垃圾收集之外,其余行为包括Serial收集器可用的所有控制参 ...

  5. 《深入java虚拟机》读书笔记之垃圾收集器与内存分配策略

    前言 该读书笔记用于记录在学习<深入理解Java虚拟机--JVM高级特性与最佳实践>一书中的一些重要知识点,对其中的部分内容进行归纳,或者是对其中不明白的地方做一些注释.主要是方便之后进行 ...

  6. JVM内存管理---垃圾收集器

    说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物.事实上,GC的历史远比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态 ...

  7. JVM探秘:垃圾收集器

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 垃圾收集器 垃圾收集算法是是内存回收的方法论,垃圾收集器是内存回收的具体实现.不同的虚 ...

  8. JVM优化之垃圾收集器以及内存分配

    在jvm中,实现了多种垃圾收集器,包括:串行垃圾收集器.并行垃圾收集器.CMS(并发)垃圾收集器.G1垃圾收集器,接下来,我们一个个的了解学习. 串行垃圾收集器 串行垃圾收集器,是指使用单线程进行垃圾 ...

  9. 【JVM】JVM中的垃圾收集器

    垃圾收集器组合 Serial+Serial Old Serial+CMS ParNew+CMS ParNew+Serial Old Paralle Scavenge + Serial Old Para ...

随机推荐

  1. 20145106 《Java程序设计》第10周学习总结

    教材学习内容总结 什么是计算机网络? 计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享 ...

  2. 20145337《网络对抗技术》逆向及BOF基础

    20145337<网络对抗技术>逆向及BOF基础 实践目标 操作可执行文件pwn1,通过学习两种方法,使main函数直接执行getshall,越过foo函数. 实践内容 手工修改可执行文件 ...

  3. luogu P2680 运输计划 65分做法

    临近\(noip,AK\)不太现实,暴力才是王道,大佬无视 这里只介绍\(65\)分做法 ① \(m==1\) 的情况 很明显 就一条路径,当然要贪心选着一条路径路上的最大的边喽 傻逼分\(get 2 ...

  4. 递增三元组|2018年蓝桥杯B组题解析第六题-fishers

    标题:递增三元组 给定三个整数数组 A = [A1, A2, ... AN], B = [B1, B2, ... BN], C = [C1, C2, ... CN], 请你统计有多少个三元组(i, j ...

  5. Leetcode——Target Sum

    Question You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you ha ...

  6. Spring报NoSuchBeanDefinitionException

    org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 上述可以看出Ac ...

  7. .NET MVC请求流程

    ASP.NET MVC 请求流程:Controller MvcHandler Action Action参数赋值 .NET MVC权限设计思考之切入点

  8. HDU 6150 Vertex Cover(构造)

    http://acm.hdu.edu.cn/showproblem.php?pid=6150 #include<iostream> #include<algorithm> #i ...

  9. TCGA系列--fusion

    http://www.tumorfusions.org/ 其他: COSMIC has a list of "curated fusion" http://cancer.sange ...

  10. Java东西太多,记录一些知识点

    实习两个月了,这两个月接触了不少东西,简单列举一下知识,未来需要多多学习和了解. 1.前端js.extjs4.Jquery(js框架这些基本现学现用): 2.基础不好要补补Servlet和JSP(再往 ...