一、简介
Java是强类型语言,强类型语言也就是强制数据类型定义的语言。
Java中的数据类型分为两类:
基本数据类型(Primitive Type) :byte、short、int、long、float、double、char、boolean,共八种。
引用数据类型(Reference Type):类、接口、数组,只要不是基本数据类型的八种,以外的都是属于引用数据类型的。
JAVA中提供了四种引用类型:强引用、软引用、软引用和虚引用。在四种引用类型中,只有强引用FinalReference类型变量是包内可见的,其他三种引用类型均为public,可以在程序中直接使用。
- 强引用:只要某个对象与强引用关联,那么JVM在内存不足的情况下,宁愿抛出outOfMemoryError错误,也不会回收此类对象
- 软引用:JVM只会在内存不足的情况下回收该对象
- 弱引用:当JVM在进行垃圾回收时,无论内存是否充足,都会回收此类对象
- 虚引用:虚引用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收。虚引用必须要和 ReferenceQueue 引用队列一起使用,当垃圾回收器准备回收一个对象时,如果发现它与虚引用关联,就会在回收它之前,将这个虚引用加入到引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被回收,如果确实要被回收,就可以做一些回收之前的收尾工作
二、为什么有它?解决了什么问题?
-
实现特定的引用类型,支持不同功能
-
使用者可以在对象被回收后得到通知
-
使用者可以自定义回收,进行非GC回收的资源释放
三、它的数据结构?
四、它使用的算法?
1.空间复杂度
2.时间复杂度
五、它的设计模式?
六、它的源码及JVM底层实现原理?
https://www.jianshu.com/p/7ff38dfbb5a8