`
frenchmay
  • 浏览: 228887 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

深入java虚拟机第9章, 垃圾收集(2)

阅读更多

垃圾收集

引用计数

堆中每一个对象都有一个引用计数。当一个对象被创建了,并且指向该对象的引用被分配给一个变量,这个对象的引用计数被置为1.当任何其他变量被赋值为对这个对象的引用时,计数加1。当一个对象的引用超过了生存期或者被设置一个新的值时,对象的引用计数减1.任何引用数为0的对象可以被当作垃圾收集。当一个对象被垃圾收集的时候,它引用的任何对象计数值减1.在这种方法中,一个对象被垃圾收集后可能导致后续其他对象的垃圾收集工作。

好处是,垃圾收集工作可以很快执行。缺点是,无法检测出两个或者更多对象循环引用的情况。

 

跟踪收集器

跟踪从根结点开始的对象引用图。在追踪的过程中遇到的对象以某种方式打上标记。当跟踪结束时,未被标记的对象就知道是无法触及的,从而可以被收集。(标记并清除)

 

堆碎片收集

标记并清楚收集器使用两种策略:压缩和拷贝,来快速移动对象来减少堆碎片。

压缩收集器将活动的对象移动到堆的一端。堆的另一端出现一个大的连续空闲区。所有被移动的对象的引用也会被更新,指向新位置。

 

拷贝收集器把所有的活动对象移动到一个新的位置。在拷贝过程中,它们被紧挨着排放,可以消除原本在旧区域的空隙。

一般的拷贝收集器算法为“停止并拷贝”。在这个方案中,堆被分为两个区域,任何时候都只能使用其中一个。

 

按代收集的收集器

拷贝收集器的缺点:

1)大多数程序创建的大部分对象都具有很短的生命周期。

2)大多数程序都创建一些具有非常长生命周期的对象。

 

拷贝收集器浪费效率的一点是,它们每次都把生命周期长的对象来回拷贝,消耗大量的时间。

按代收集器通过把对象按照寿命来分组来解决这个效率底下的问题,更多地收集哪些那些短暂出现的年幼对象。

堆被分成多个子堆,每个堆为一代。最年幼的堆进行最频繁的垃圾收集。如果一个相对年幼的对象经历了好几次垃圾收集后仍然存在,那么这个对象就成长成寿命更高的一代,转移到另一个子堆。

分享到:
评论

相关推荐

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    《深入Java虚拟机(原书第2版)》,原书名《Inside the Java Virtual Machine,Second Edition》,作者:【美】Bill Venners,翻译:曹晓钢、蒋靖,出版社:机械工业出版社,ISBN:7111128052,出版日期:2003 年 9 ...

    深入JAVA虚拟机第二版.pdf 目录

    译者序 前言 第1章 Java体系结构介绍 ...第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句

    深入Java虚拟机(原书第2版)及书中源代码

    第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句 第19章 方法的调用与返回 第20章 ...

    深入java虚拟机中文第2版

    第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句 第19章 方法的调用与返回 第20章 ...

    深入java虚拟机第二版

    深入java虚拟机第二版 第1章 Java体系结构介绍 1.1 为什么使用Java 1.2 网络带来的挑战和机遇 1.3 体系结构 1.3.1 Java虚拟机 1.3.2 类装载器的体系结构 1.3.3 Java class文件 1.3.4 Java API 1.3.5 ...

    深入java虚拟机

    第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句 第19章 方法的调用与返回 第20章 ...

    深入Java虚拟机

    第9章 垃圾收集 9.1 为什么要使用垃圾收集 9.2 垃圾收集算法 9.3 引用计数收集器 9.4 跟踪收集器 9.5 压缩收集器 9.6 拷贝收集器 9.7 按代收集的收集器 9.8 自适应收集器 9.9 火车算法 9.9.1 ...

    深入JAVA虚拟机(第2版)

    第9章 垃圾收集 9.1 为什么要使用垃圾收集 9.2 垃圾收集算法 9.3 引用计数收集器 9.4 跟踪收集器 9.5 压缩收集器 9.6 拷贝收集器 9.7 按代收集的收集器 9.8 自适应收集器 9.9 火车算法 9.9.1 ...

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第9节Java技术体系00:08:46分钟 | 第10节jdk8的新特性00:07:31分钟 | 第11节lanmbda表达式简介00:07:02分钟 | 第12节Java虚拟机-classic vm00:06:06分钟 | 第13节Java虚拟机-ExactVM00:03:35分钟 | 第14节Java...

    Java虚拟机

    这本书的内容是帮你全面了解java虚拟机,本书第1版两年内印刷近10次,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    第2章 Java内存区域与内存溢出异常 / 24 2.1 概述 / 24 2.2 运行时数据区域 / 25 2.2.1 程序计数器 / 25 2.2.2 Java虚拟机栈 / 26 2.2.3 本地方法栈 / 27 2.2.4 Java堆 / 27 2.2.5 方法区 / 28 2.2.6 运行...

    深入理解JVM内存结构及运行原理全套视频加资料.txt

     第9讲 Java技术体系 00:08:46  第10讲 jdk8的新特性 00:07:31  第11讲 lanmbda表达式简介 00:07:02  第12讲 Java虚拟机-classic vm 00:06:06  第13讲 Java虚拟机-ExactVM 00:03:35  第14讲 Java虚拟机-...

    张孝祥Java就业培训教程.pdf

    1.1 Java虚拟机及Java的跨平台原理 1.2 Java开发环境的搭建 1.3 体验Java编程的过程 1.4 classpath的设置 1.5 有效利用Java的文档帮助 1.6 JVM(虚拟机)的运行过程 1.7 垃圾回收器 1.8 反编译工具的介绍 第2章 Java...

Global site tag (gtag.js) - Google Analytics