java中什么叫引用类型,java引用的类型
如何解决写爬虫IP受阻的问题?立即使用。
Java的引用类型
Java一般有两种类型,即基本数据类型和引用数据类型。其中引用数据类型是指存储堆中要引用的对象,引用是Java面向对象的一个特性。
从JDK1.2开始,Java中有四种类型的引用,即:
strong参考
软参考(软参考)
薄弱环节
幻象参照
强引用-StrongReference
这种引用是正常开发中最常用的,比如string strong=new string(强引用)。当一个实例对象有一个强引用时,垃圾收集器不会回收该对象。当内存不足时,它宁愿抛出OutOfMemeryError异常也不回收被强引用的对象,因为JVM认为被强引用的对象就是用户正在使用的对象,它分不清回收哪个。强制回收可能会导致严重的系统错误。
软引用-SoftReference
如果一个对象只有软引用,JVM只会在内存不足时回收该对象,在其他情况下不会回收。软引用可以与ReferenceQueue结合使用。当软引用的对象由于系统内存不足而被回收时,JVM会将这个软引用添加到其关联的ReferenceQueue中。
ReferenceQueuereferenceQueue=newReferenceQueue();
SoftReferenceBooksoftReference=newSoftReference(new book(),reference queue);
book book=soft reference . get();
reference reference=reference queue . poll();当系统内存不足时,触发gc,书会被回收,引用不会为空。
弱引用-WeakReference
当JVM触发gc时,只有弱引用的对象才会被回收。与软引用不同,无论内存是否不足,弱引用都将被回收。弱引用可以与ReferenceQueue结合使用。当软引用的对象由于系统触发gc而被回收时,JVM会将这个弱引用添加到其关联的ReferenceQueue中。但是,由于垃圾收集器线程的低优先级,弱引用可能无法快速回收。通过一个主动触发gc的例子验证了这一结论。
ReferenceQueuereferenceQueue=newReferenceQueue();
WeakReferenceBookweakReference=newWeakReference(new book(),reference queue);
book book=soft reference . get();
system . GC();
//Runtime.getRuntime()。GC();
reference reference=reference queue . poll();当然,这是不能每次都重复的,因为我们调用System.gc()只是告诉JVM回收垃圾的时间到了,但还不能确定什么时候能完成。但就我的测试来看,只要多写几次System.gc(),复发的概率还是很大的。
虚引用-PhantomReference
如果一个对象只引用一个虚拟引用,垃圾收集器可以随时回收它。虚拟引用主要用于跟踪被垃圾收集器回收的对象的活动。当它被回收时,JVM会将这个弱引用添加到其关联的ReferenceQueue中。
与软引用和弱引用不同,虚拟引用必须有一个ReferenceQueue与之关联,通过phantomReference.get()得到的值为null。试想,如果没有与之相关联的ReferenceQueue,存在的价值是什么?
PhantomReferenceBookphantomReference=newPhantomReference(new book(),reference queue);
book book=phantom reference . get();//该值为空
reference reference=reference queue . poll();推荐教程:以上《java教程》是Java引用类型。包括哪些内容?更多详情请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。