Java的对象都是在堆中,我们程序中使用对象都是用的引用,通过引用来对对象进行修改,传递等,也就是说,jvm帮我们完成了对象的内存申请,创建,我们只需通过引用来使用对象就可以了,这样屏蔽了很多复杂的操作,那么java中引用有四种类型:
强引用:我们最常用的就是这种引用,比如Object obj = new Object(),那么obj就是强引用,如果一个对象具有强引用,那就类似我们经常穿的衣服啊等必不可少的生活用品,我们肯定不会把他扔掉,同样jvm的垃圾回收器也不会回收它。当内存空间不足的时候,java虚拟机宁可抛出OOM异常,也不会回收具有强引用的对象来释放内存。如果我们把obj 这个引用赋值为null,那么当jvm扫描到 Object这个对象不再存在强引用时,jvm将回收他
软引用:软引用是用来描述一些有用但并不是必需的对象,在Java中用java.lang.ref.SoftReference类来表示。对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。如果一个对象只有软引用,就类似鸡肋,食之无味、弃之可惜,如果内存空间足够大,垃圾回收期就不会回收它,如果内存空间不够了,就会回收这些对象。他的这种特性常常用来实现缓存,我们的缓存常常需要放到内存中,如果具备了这种特性&#x