1.强引用
Java中的强引用,类似于C++的指针。通过引用,可以对堆中的对象进行操作。在某个函数中,当创建了一个对象,该对象被分配在堆中,通过这个对象的引用才能对这个对象进行操作。(就是java中一般的引用)
如,User user=new User(name,age);其中user就是引用,存放在栈中,new User(name,age)就是一个实体的对象,存放在堆中。强引用可以直接访问目标对象。 强引用所指向的对象在任何时候都不会被系统回收。JVM宁愿抛出OOM异常,也不会回收强引用所指向的对象,所以 强引用可能导致内存泄露。
2.软引用
软引用是除了强引用外,最强的引用类型。可以通过java.lang.ref.SoftReference使用软引用。一个持有软引用的对象,不会被JVM很快回收,JVM会根据当前堆的使用情况来判断何时回收。当堆的使用率临近阈值时,才会回收软引用的对象。
应用场景:网络请求,文本、图片加载,数据库的读取。(经常使用的比较耗时间,耗内存的操作)
3.弱引用
弱引用是一种比软引用较弱的引用类型,可以通过java.lang.ref.WeakReference使用软引用。在系统GC时,只要发现弱引用,不管系统堆空间是否足够,都会将对象进行回收。但是,由于垃圾回收器的线程通常优先级很低,因此,并一不定能很快的发现持有弱引用的对象。这种情况下,弱引用对象可以存在较长的一段时间。一旦一个弱引用对象被垃圾回收器回收,便会加入到一个注册引用队列中。
应用场景:一般用于容易导致内存泄露的延时操作,不是经常使用的,如 handler。
4.虚引用(没啥大用处,可以放在一边的)
2,线程池的理解以及运用