在堆中存放着所有的对象实例,垃圾收集器在对堆进行回收前,第一件事就是要确定哪些对象还活着,哪些以及“死去”。
2.计数算法何为引用算法?
在对象中添加一个引用计数器,当有一个地方引用当前对象,计数器值加1,当引用失效的时候计数器值减1;当计数器值为零的时候对象则就是不会被使用。
3.可达性分析算法当前主流的程序语言的内存管理子系统都是通过可达性分析算法来判断对象是否存活。这个算法思路就是通过一系列称为“GC Roots”的根对象作为起始节点,根据这个起始节点的引用关系向下检索。搜索走过的路径 称为“引用链”,如果某个对象到GC Roots间没有任何引用链项链就是从GC Roots这个根对象无法到达,证明该对象不可能再被使用。
4.四大引用众所周知Java对引用概念进行了扩充,将引用分为强引用,软引用,弱引用,虚引用。
强引用是最传统的引用定义,在程序代码中最普遍的存在就类似于 Object obj = new Object(),只有当前实例对象不再被引用垃圾回收集才会进行回收。
软引用是用来描述一些还有用的,但非必要的对象。只要被软引用关联着的对象只有当内存溢出异常前,会把这些对象列进回收范围之中进行第二次回收。如果还没有足够的内存就会跑出内存溢出异常。jdk1.2之后通过 SoftReference
弱引用是非必须存在的对象,它的强度比软引用还弱一些,被弱引用关联的对象只能生存在下一次垃圾收集发生为止。当垃圾收集器工作时,无论是否内存溢出异常都会进行回收。jdk1.2之后通过WeakReference进行关联弱引用对象。
虚引用是最弱的一种关联。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来获取一个对象实例,为对象设置虚引用只是为了能在这个对象被销毁的时候收到一个系统通知。jdk1.2之后通过PhantomReference进行关联虚引用对象。
今日分享到此结束。。。。。。我只是一个会吹比的选手。



