前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于垃圾回收的一些基本原理及技术解析

关于垃圾回收的一些基本原理及技术解析

作者头像
上帝
发布2018-05-18 10:16:15
5930
发布2018-05-18 10:16:15
举报
文章被收录于专栏:影子影子

关于垃圾回收的一些基本原理及技术解析

什么是垃圾,为什么要垃圾回收?

  垃圾回收是很大一块,在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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档