java 引用类型

我刚接触java、对于引用的认识。就是 Student stu=new Student();stu就是那个引用,至于这个stu是个什么样的引用,就不太清楚了。
中间看HashMap的时候,提到了一个弱引用,哈,竟然还有强弱之分。
仔细一探,竟然有四种。
java 中对象的引用类型分为四种:强引用、弱引用、弱引用、虚引用

强引用(StrongReference)

就是我们平时最常用的,Student stu=new Student();这里的引用就是个强引用。
强引用有个特点,为什么说它强呢。就是你内存中的对象已经多到了一种地步。都抛出内存不足(OutOfMemoryError)的错误了,程序也不会释放你强引用的对象。
只要一个对象还有强引用持有、那么他就永远不会被回收。

软引用(SoftReference)

软引用,比起强引用稍弱一些,当发现内存要不足的时候,软引用的对象是可以被释放的。
软引用的适用场景一般来说最常见的是缓存吧。用来存一些非必需、但是又利用提升效率的对象。

弱引用(WeakReference)

当时第一次接触是一个叫做WeakHashMap的东西,当时在想他有什么不一样,怎么还就Weak了呢。
它的引用强度要稍弱一些,或者说对与对象的牵制要弱一些。它的作用是引用一个对象,但是并不阻止该对象被回收。如果使用一个强引用的话,只要该引用存在,那么被引用的对象是不能被回收的。弱引用则没有这个问题。在垃圾回收器运行的时候,如果一个对象的所有引用都是弱引用的话,该对象会被回收。弱引用的作用在于解决强引用所带来的对象之间在存活时间上的耦合关系.接触耦合关系,这一点蛮重要也是我们要利用的一点。
在hash表中。hash表允许使用任何Java对象作为键来使用。当一个键值对被放入到hash表中之后,hash表对象本身就有了对这些键和值对象的引用。如果这种引用是强引用的话,那么只要hash表对象本身还存活,其中所包含的键和值对象是不会被回收的。这种后果,在一些小例子中不是那么好体会。设想一种情况,比如某个存活时间很长的hash表中包含的键值对很多,最终就有可能消耗掉JVM中全部的内存。

虚引用(PhantomReference)

有些时候我们会把它称作幽灵引用,因为你引用的这个对象已经可能已经准备好要被回收了。
一个对象的回收:可以这么来描述、首先确定该对象已经不被使用(即处于对象的不可达阶段),然后对该对象进行一些必要的预清理工作。然后将该对象加入一个叫做引用序列的东西中,即代表这个对象即将被回收。
而虚引用的作用,就是查看我们引用的这个对象,是否已经存在于这个序列中。即这个对象已经要被回收了,我们就别用了。这种引用,讲真,我没用到过,顺道了解到的而已。据说在一些较为精准的场景下会进行使用。不过可能导致,对象回收的效率下降,据说……

这就是java 引用的基本类型了。
这篇文章仅仅算是个小小的引导,没有具体的代码示例,具体用法API上都有,自己去看看吧~
技术文章,不要打赏~

你可能感兴趣的:(java 引用类型)