关于垃圾回收的一些基本原理及技术解析
2017-08-13 23:38
561 查看
关于垃圾回收的一些基本原理及技术解析
什么是垃圾,为什么要垃圾回收?
垃圾回收是很大一块,在java虚拟机一些资料描述中,jvm大致干三件大事儿,1>加载class 2>分配存储空间 3>执行垃圾回收;可见垃圾回收在高级语言中所占的分量。(不好意思,扯远了~),简单点儿说就是:在程序运行时刻,产生的一直未能删除的或不能被引用的对象数据称之为垃圾,如果一直未能通过有效的方式回收会导致内存泄露(通俗点就是内存撑爆了).
关于人工回收的一些问题:
在C或C++语言中,程序员可显示地安排数据回收,当然在理想的情况下 任何不会再被访问的的存储都应该会被删除,同样,任何可能还会被引用的存储对象都不能被删除。但事实上,由于本身的回收困难之处以外还存在不少技术难点。简单点儿说就是 A>如果一直未能删除不能被引用的内存数据会使0内存占用过大,导致内存泄露 B>如果程序引用了一个已经被删除(回收的)的数据 会导致空指针引用
垃圾回收的一般要求:
基本要求是类型安全,但不是所有语言都适合进行自动垃圾回收。为了使垃圾回收器正常工作,它必须知道给定的数据元素或元素的分量(是否或可用作)一个指向某块已分配存储空间的指针。但是数据元素或分量在一些高级语言中又是类型不安全的,比如在C或C++中可以对存储地址进行任意操作。
垃圾回收的性能代价:
A>运行时间: 垃圾回收的速度可能较慢,容易增加一个应用程序的总运行时间
B>存储空间使用 需要避免内存碎片,极大地利用可用内存空间
C>停顿时间 垃圾回收过程会在没有任何预警的情况下突然启动,导致应用程序突然停顿,所以缩小停顿时间很重要
D>程序局部性 由于垃圾回收控制了数据的放置,因此影响了将要执行的代码的数据局部性。此时需要通过释放或复用空间改善时间局部性,通过重新放置移动一起使用的数据改善空间局部性
垃圾回收的一般方法:
垃圾回收分为:A>基于引用计数的垃圾回收 B>基于跟踪的垃圾回收 C>短停顿式垃圾回收
引用式的垃圾回收:
概述:对应每个对象都维护一个对象的引用计数,当计数为0的时候,该对象会被确认为垃圾随即被删除。
缺点:它不能回收不可达的循环数据结构,因为每次引用赋值都会增加一个额外运算,遂开销比较大。
跟踪的垃圾回收:
概述:标记所有可达对象并移入空闲列表,然后清扫整个堆区,此类型的垃圾回收会周期地(空闲空间耗尽或空闲空间低于某个阀值时)运行
缺点:很难找到堆区的不可达对象,导致清扫的代价较大,清扫时程序会全面停顿
短停顿式垃圾回收:
概述:每次只做部分垃圾回收工作,从而减少一次停顿的长度,按时间(增量式回收)或空间(部分式回收)分割回收任务
缺点:增量式垃圾回收在回收之后会留下漂浮垃圾,部分式垃圾回收会造成停顿较长或回收无效垃圾
原创博客,转载请注明出处:http://cnblogs.com/funnyzpc
什么是垃圾,为什么要垃圾回收?
垃圾回收是很大一块,在java虚拟机一些资料描述中,jvm大致干三件大事儿,1>加载class 2>分配存储空间 3>执行垃圾回收;可见垃圾回收在高级语言中所占的分量。(不好意思,扯远了~),简单点儿说就是:在程序运行时刻,产生的一直未能删除的或不能被引用的对象数据称之为垃圾,如果一直未能通过有效的方式回收会导致内存泄露(通俗点就是内存撑爆了).
关于人工回收的一些问题:
在C或C++语言中,程序员可显示地安排数据回收,当然在理想的情况下 任何不会再被访问的的存储都应该会被删除,同样,任何可能还会被引用的存储对象都不能被删除。但事实上,由于本身的回收困难之处以外还存在不少技术难点。简单点儿说就是 A>如果一直未能删除不能被引用的内存数据会使0内存占用过大,导致内存泄露 B>如果程序引用了一个已经被删除(回收的)的数据 会导致空指针引用
垃圾回收的一般要求:
基本要求是类型安全,但不是所有语言都适合进行自动垃圾回收。为了使垃圾回收器正常工作,它必须知道给定的数据元素或元素的分量(是否或可用作)一个指向某块已分配存储空间的指针。但是数据元素或分量在一些高级语言中又是类型不安全的,比如在C或C++中可以对存储地址进行任意操作。
垃圾回收的性能代价:
A>运行时间: 垃圾回收的速度可能较慢,容易增加一个应用程序的总运行时间
B>存储空间使用 需要避免内存碎片,极大地利用可用内存空间
C>停顿时间 垃圾回收过程会在没有任何预警的情况下突然启动,导致应用程序突然停顿,所以缩小停顿时间很重要
D>程序局部性 由于垃圾回收控制了数据的放置,因此影响了将要执行的代码的数据局部性。此时需要通过释放或复用空间改善时间局部性,通过重新放置移动一起使用的数据改善空间局部性
垃圾回收的一般方法:
垃圾回收分为:A>基于引用计数的垃圾回收 B>基于跟踪的垃圾回收 C>短停顿式垃圾回收
引用式的垃圾回收:
概述:对应每个对象都维护一个对象的引用计数,当计数为0的时候,该对象会被确认为垃圾随即被删除。
缺点:它不能回收不可达的循环数据结构,因为每次引用赋值都会增加一个额外运算,遂开销比较大。
跟踪的垃圾回收:
概述:标记所有可达对象并移入空闲列表,然后清扫整个堆区,此类型的垃圾回收会周期地(空闲空间耗尽或空闲空间低于某个阀值时)运行
缺点:很难找到堆区的不可达对象,导致清扫的代价较大,清扫时程序会全面停顿
短停顿式垃圾回收:
概述:每次只做部分垃圾回收工作,从而减少一次停顿的长度,按时间(增量式回收)或空间(部分式回收)分割回收任务
缺点:增量式垃圾回收在回收之后会留下漂浮垃圾,部分式垃圾回收会造成停顿较长或回收无效垃圾
原创博客,转载请注明出处:http://cnblogs.com/funnyzpc
相关文章推荐
- 关于垃圾回收的一些基本原理及技术解析
- 浏览器工作原理(三):关于解析的一些基本概念(理论性很强)
- 关于C++为什么不加入垃圾回收机制解析
- Microsoft.Net框架程序设计学习笔记(32):垃圾收集平台基本原理解析
- 这篇文档的价值在于详细的描述了三层交换的基本流程,以及一些关于三层交换表的有价值的技术细节。让读者对三层交换的认识提升到一个新的高度! 这篇文档的价值在于详细的描述了三层交换的基本流程,以及一些关于三
- 关于垃圾回收的一些看法
- 垃圾回收机制及析构器原理解析
- Java虚拟机垃圾回收(三) 7种垃圾收集器:主要特点 应用场景 设置参数 基本运行原理
- 关于.NET垃圾回收(GC)的基本问题
- 关于GC垃圾回收的原理
- Java虚拟机垃圾回收(三) 7种垃圾收集器:主要特点 应用场景 设置参数 基本运行原理
- Java技术积累递归调用——解析树的基本实现原理
- 浅谈关于Java的GC垃圾回收器的一些基本概念
- web中关于垃圾回收的一些观点
- Java虚拟机垃圾回收(三) 7种垃圾收集器:主要特点 应用场景 设置参数 基本运行原理
- Java 关于垃圾回收的一些编程建议
- 自动垃圾回收学习笔记-一些基本概念
- 关于垃圾回收的一些知识
- 垃圾回收机制及析构器原理解析
- 关于垃圾回收,我来解释下为什么LocalConnection可以实现垃圾回收