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

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏影子

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

3528
来自专栏安恒网络空间安全讲武堂

适合破解新手的160个crackme练手之01

适合破解新手的 160个crackme练手之01 无意中在网上找到了适合新手的160个crackme,所以想着来练手,感觉用来学习逆向很不错 首先打开exe,看...

3459
来自专栏精讲JAVA

面试高峰期,如何应对面试官的jvm刁难,特写一篇jvm面经(第一部)

读者前言 已经进入三月份,正所谓金三银四,正是一年最好的招聘期,想必我的公号粉丝们一定有不少想要跳槽的吧,哈哈,/**偷偷告诉你们其实小编也准备...

5577
来自专栏owent

POJ PKU 2378 Tree Cutting 解题报告

402
来自专栏牛客网

热乎乎的阿里面经,攒人品

一面: 1.自我介绍一下,然后问你最擅长哪一方面(我说虚拟机、集合) 2.他说HashMap我现在都不敢问了,出过很多笑话,很多人都是背的,自己没办法判断是看...

3485
来自专栏编程一生

谈面试时从写一个单例开始究竟能问多深及终极解决方案

1454
来自专栏熊二哥

.NET工作准备--01前言

01应聘须知(已过时) -1.了解软件开发大环境。 -2.准备简历:不宜超过一页,永远准备中文,模板。 -3.渠道:3大网站,中华英才,前程无忧(51job最...

2068
来自专栏一名叫大蕉的程序员

简约的JAVA版本MapReduce和日常No.25

昨天做了一个小调查,说看看想看些啥。大概的分布是这样的,一个1代表一个投票。看来还是2、3比较多。 11111 希望看到"算法"回复1。 111...

1895
来自专栏恰同学骚年

设计模式的征途—9.组合(Composite)模式

树形结构在软件中随处可见,比如操作系统中的目录结构,公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题。组合模式通过一种巧妙的设...

1344
来自专栏海纳周报

Java的分代式GC

要说理解JVM的垃圾回收,什么引用计数,Copy GC,mark & compaction好像都不是必须要掌握的东西。真要说对普通的Java程序员比较重要的东西...

3589

扫码关注云+社区