《深入理解Java虚拟机》笔记02 -- 垃圾收集算法
1. 标记 - 清除算法
先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。它是最基础的收集算法。其他收集算法都是根据其思路,改进其不足之处。
缺点:1) 标记和清除两个阶段的效率都不高;2)清除后会产一大量不连续的内存碎片

2. 复制算法
将可用内存划分为大小相等的两块,每次只使用其中一块。当一块内存用完了,将还存活的对象复制到另一块,然后将使用过的那块全部清空。
缺点:可使用内存仅为分配的一半,代价太高。
这种算法主要用在新生代。新生代中大多数对象都是朝生夕死的,所以并不需要1:1来划分,而是分为一块较大的Eden区和两块较小的Survivor区,每次使用Eden和其中一块Survivor。当回收时,将Eden和Survivor中还存活着的对象一次性地复制到另外一块Survivor区,最后清理掉Eden和刚才用过的Survivor空间。HotSpot虚拟机默认的Eden和Survivor的大小比例是8:1。
3. 标记 - 整理算法
标记过程与“标记 - 清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。

4. 分代收集算法
按照对象存活周期的不同,一般把Java堆分为新生代和老年代。新生代采用复制算法,老年代采用“标记 - 清理”或“标记 - 整理”算法。
《深入理解Java虚拟机》笔记02 -- 垃圾收集算法的更多相关文章
- 深入理解java虚拟机系列二——垃圾收集算法
		
在主流的商用程序语言中大多都是用根搜索算法(GC Roots Tracing)判断对象是否存活,比如java,c#等.当从GC Roots到某个对象不可达,则证明此对象是不可用的,将要被回收. 商业虚 ...
 - 深入理解Java虚拟机(三)、垃圾收集算法
		
1.第一门真正使用内存动态分配和垃圾收集技术的语言:Lisp 2.程序计数器.虚拟机栈.本地方法栈这3个区域随线程而生灭,这几个区域的内存会随着方法结束或线程结束而回收,GC关注的是Java堆和方法区 ...
 - 《深入理解 Java 虚拟机》学习 -- 垃圾收集器
		
<深入理解 Java 虚拟机>学习 -- 垃圾收集器 1. Serial 收集器(新生代) 含义: 单线程收集器. 缺点: 进行垃圾收集时,必须暂停其他所有的工作线程. 优点: 简单而高效 ...
 - 深入理解java虚拟机【垃圾回收算法】
		
Java虚拟机的内存区域中,程序计数器.虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭:栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构 ...
 - Java内存区域与内存溢出异常——深入理解Java虚拟机  笔记一
		
Java内存区域 对比与C和C++,Java程序员不需要时时刻刻在意对象的创建和删除过程造成的内存溢出.内存泄露等问题,Java虚拟机很好地帮助我们解决了内存管理的问题,但深入理解Java内存区域,有 ...
 - 垃圾收集器与内存分配策略——深入理解Java虚拟机 笔记二
		
在本篇中,作者大量篇幅介绍了当时较为流行的垃圾回收器,但现在Java 14都发布了,垃圾收集器也是有了很大的进步和发展,因此在此就不再对垃圾收集器进行详细的研究.但其基本的算法思想还是值得我们参考学习 ...
 - 深入理解Java虚拟机笔记——垃圾收集器与内存分配策略
		
目录 判断对象是否死亡 引用计数器算法 可达性分析算法 各种引用 回收方法区 垃圾收集算法 标记-清除算法 复制算法 标记-整理算法 分代收集算法 HotSpot算法实现 枚举根节点 GC停顿(Sto ...
 - 深入理解Java虚拟机笔记
		
1. Java虚拟机所管理的内存 2. 对象创建过程 3. GC收集 4. HotSpot算法的实现 5. 垃圾收集器 6. 对象分配内存与回收细节 7. 类文件结构 8. 虚拟机类加载机制 9.类加 ...
 - 深入理解java虚拟机:笔记
		
1.运行时数据区域 1.程序计数器 当前线程执行字节码的行号指示器,字节码解释器工作通过改变这个计数器的值来选取下一条需要执行的字节码指令,每一个线程拥有独立的程序计数器,线程私有的内存 2.虚拟机栈 ...
 - 深入理解Java虚拟机(四)——HotSpot垃圾收集器详解
		
垃圾收集器 新生代收集器 1.Serial收集器 特点: 单线程工作,收集的时候就会停止其他所有工作线程,用户不可知不可控,会使得用户界面出现停顿. 简单高效,是所有收集器中额外内存消耗最少的. 没有 ...
 
随机推荐
- [证书服务器 第二篇] 基于OpenSSL 在 CentOS6 系统上 搭建自签证书服务,并应用于Web容器
			
第一部分:概述 .. 第二部分:环境准备 1 操作系统 CentOS 6.x 2 安装openssl yum install -y openssl 3 安装jdk 从官网下载JDK http://ww ...
 - mysql服务器启动问题
			
The server quit without updating PID file (/usr/local/mysql/data/snsgou.pid);可能的情况是启动的用户不对,
 - mac下编译FFmpeg-Android
			
参考: [史上最傻瓜的]mac下编译FFmpeg-Android http://blog.csdn.net/ashqal/article/details/9381037
 - wampserver发布详解
			
以下为wampserver发布php并绑定域名的操作 1 在“httpd.conf”文件中查找:Include conf/extra/httpd-vhosts.conf,去掉前面的注释# 2 打开ap ...
 - 和菜鸟一起学android4.0.3源码之硬件gps简单移植【转】
			
本文转载自:http://blog.csdn.net/mwj19890829/article/details/18751447 关于Android定位方式 android 定位一般有四种方法,这四种方 ...
 - 版本名称SNAPSHOT、alpha、beta、release、GA含义
			
Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只有测试人员使用.Beta:也是测试版,这个阶段的版本会一直加入新的功能.在Alpha版之后推出.RC:(Release Candida ...
 - 嵌入式选择与L1正则化
			
http://blog.csdn.net/irene_loong/article/details/73741521
 - html5+css3酷炫音频播放器代码
			
1. [代码][JavaScript]代码 (function($){ jQuery.fn.extend({ "initAudio" : fun ...
 - BZOJ 2101 [Usaco2010 Dec]Treasure Chest 藏宝箱:区间dp 博弈【两种表示方法】【压维】
			
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2101 题意: 共有n枚金币,第i枚金币的价值是w[i]. 把金币排成一条直线,Bessie ...
 - sed 中带变量的情况
			
#teststr="IBM" #sed -n '/' "$teststr" '/=' testfile.txt 在sed中使用变量 通常,我们使用sed进行变量 ...