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
网站链接:/news/64310.html
成都网站建设公司_创新互联,为您提供网站策划、响应式网站、网站内链、服务器托管、App开发、全网营销推广
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联
猜你还喜欢下面的内容