For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
我们在前几期的文章中给大家简单介绍了程序员在学习Java编程的时候需要掌握的一些基础知识等内容,而本文我们就再来了解一下,Java编程算法都有哪些类型。
1.引用计数器算法
引用计数算法(ReferenceCounting)属于垃圾收集器的早期实现算法了,它指的是在创建对象时关联一个与之相对应的计数器,当此对象被使用时加1,相反销毁时-1。当此计数器为0时,则表示此对象未使用,可以被垃圾收集器回收。
2.可达性分析算法
可达性分析算法(ReachabilityAnalysis)是目前主流虚拟机中,使用广泛的判断垃圾对象的实现算法,它指的是从对象的起点(GCRoots)开始向下搜索,如果对象到GCRoots没有任何引用链相连时,也就是说此对象到GCRoots不可达时,则表示此对象可以被垃圾回收器所回收。
在Java语言中,可作为根节点(GCRoots)的对象有以下4类:
Java虚拟机栈中的引用对象,也就是Java虚拟机栈帧中,本地变量表所存储的(引用)对象。在Java虚拟机栈帧中存储的对象都是将来执行时,要使用的对象,所以和引用对象相关的对象都不能被回收;
本地方法栈中的引用对象和Java虚拟机栈中的引用对象类似,也不能被回收;
方法区中类静态属性引用的对象也可以作为GCRoots;
方法区中常量引用的对象也可以作为GCRoots。因为常量是保存在常量池中的,属于全局可使用的对象,所以也能作为GCRoots。
3.有关“引用”
不管是引用计数法还是可达性分析算法都与对象的“引用”有关,这说明对象的引用决定了对象的生死,而Java中的引用也比较复杂,它从JDK1.2之后,(引用)分成了以下4种类型:
强引用:在代码中普遍存在的,类似Objectobj=newObject()这类引用,只要强引用还在,垃圾收集器永远不会回收掉被引用的对象;
软引用:是一种相对强引用弱化一些的引用,可以让对象豁免一些垃圾收集,只有当JVM认为内存不足时,才会去试图回收软引用指向的对象,JVM会确保在抛出OutOfMemoryError之前,清理软引用指向的对象;
弱引用:非必需对象,但它的强度比软引用更弱,被弱引用关联的对象只能生存到下一次垃圾收集发生之前;
虚引用:也称为幽灵引用或幻影引用,是弱的一种引用关系,无法通过虚引用来获取一个对象实例,为对象设置虚引用的目的只有一个,就是当着个对象被收集器回收时收到一条系统通知。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。