垃圾回收GC

2016-11-09    分类: 网站建设

用过C语言的开发人员都知道,内存的管理一直都是个头疼事,得自己管理对象的生命周期,不当的内存释放或者是使用可能会引起程序的异常,而java有GC这一个概念,能够自动帮你释放内存,我们来看一下它是如何管理内存的

GC的意思就是Garbage Collections,意思就是垃圾回收的意思,java会判断一个对象是否到了他的生命尽头(不用了)来对他进行一个垃圾回收。

首先要回收垃圾肯定得先判断哪个是垃圾对象,有两种方法

1.引用计数法,这种方法每个对象在生成的时候都有一个计数,只要有对象引用他,该数就加一,有对象和他断了联系就减一,知道该对象的计数到0,这个时候就被当成垃圾对象,被回收掉,但是该方法有缺点,就是不能解决循环引用的问题,例如 a引用b,b引用c , c引用a,此时三个对象的计数均不等于0,垃圾回收器就不能回收掉他们

2.可达法也叫跟搜索法, 引用了一个根的概念,任何对象的引用能到达跟的都不算是垃圾对象。当然,也不能一下把它锤死,但是如果是两次都是他的话,达不了根的都是垃圾对象

其次就是垃圾回收的算法,共有下面几种

1.标记清除法 , 首先把垃圾对象标记,标记完垃圾对象后,就清除

其原理就是在一块内存区域中标记多个垃圾独对象,当然对个垃圾对象的位置也可能是不同的, 这就会出现一个缺点, 会出现内存碎片,当要分配一个连续的空间时就不能使用该内存区域了,而且标记过程和清除过程的效率都不算太高,所以说这只是一个最基础的算法.

2. 标记压缩算法, 此算法可以说是解决了标记清除算法所遗留的问题,也就会内存碎片,该算法会先标记垃圾对象, 然后把垃圾对象放到内存区域的一边, 不是垃圾对象的放到内存区域的另一边, 然后清除垃圾对象, 该算法的优点就是不会出现内存碎片,但是会改变原始的位置.

3. 复制算法, 该算法是把内存区域分为两块大小相同的区域, 当一块区域的内存满了的时候, 会把存活对象复制到另一个快内存区域里面,然后清除原来的内存块儿, 把当前使用的做为正在使用的, 这样也没有内存碎片的问题, 但缺点就是要把内存分为两块儿, 在存活对象比较多的时候, 要进行多次的复制, 这样也会使效率变低

JAVA中的分代收集算法

因为各种对象的生命周期不一致, 所以我们把他们分为新生代和老年代

新生代都是一些生命周期比较短的对象,我们就是用复制算法, 老年代都是一些生命周期比较长的对象我们就使用标记清除 和 标记压缩 来清除垃圾对象。

新闻名称:垃圾回收GC
当前URL:https://www.cdcxhl.com/news10/64310.html

成都网站建设公司_创新互联,为您提供关键词优化商城网站定制网站建站公司静态网站自适应网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

h5响应式网站建设