定义 SoftReference是软引用,其引用的对象在内存不足的时候会被回收.只有软引用指向的对象称为软可达(softly-reachable)对象. 说明 垃圾回收器会在内存不足,经过一次垃圾回收后,内存仍旧不足的时候回收掉软可达对象.在虚拟机抛出OOM之前,会保证已经清除了所有指向软可达对象的软引用. 如果内存足够,并没有规定回收软引用的具体时间,所以在内存充足的情况下,软引用对象也可能存活很长时间. JVM会根据当前内存的情况来决定是否回收softly-reachable对象,但只要re…
定义 WeakReference是弱引用,该引用不会影响垃圾回收器对对象的回收,不会影响对象的生命周期. 说明 当虚拟机在某个时间点决定要回收一个弱可达(weakly-reachable)对象时,会自动清除该对象的所有弱引用.并且会将对象变为finalizable状态,然后把这些刚清除的弱引用放到其注册的引用队列中. [前面已经说明过WeakReference的用法了,本篇仅对WeakReference从源码角度做一些补充. 源码 public class WeakReference<T> e…
定义 ReferenceQueue是引用队列,用于存放待回收的引用对象. 说明 对于软引用.弱引用和虚引用,如果我们希望当一个对象被垃圾回收器回收时能得到通知,进行额外的处理,这时候就需要使用到引用队列了. 在一个对象被垃圾回收器扫描到将要进行回收时,其相应的引用包装类,即reference对象会被放入其注册的引用队列queue中.可以从queue中获取到相应的对象信息,同时进行额外的处理.比如反向操作,数据清理,资源释放等. 使用例子 public class ReferenceQueueTe…
定义 PhantomReference是虚引用,该引用不会影响不会影响对象的生命周期,也无法从虚引用中获取对象实例. 说明 源码介绍部分其实也没多大内容,主要内容都在前面介绍中说完了.PhantomReference类的源码和WeakReference类一样简单: public class PhantomReference<T> extends Reference<T> { public T get() { return null; } /** * 这里传入的引用队列也可以为nul…
数据结构与算法系列2.2 线性表 什么是链表? 链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表的链接次序实现的一系列节点组成,节点可以在运行时动态生成,每个节点包括两个部分,一个是村粗数据元素的数据域,一个是存储指针的指针域,相比于线性表顺序结构,操作复杂.由于不必须按照顺序存储,链表在插入的时候可以达到o(1)的复杂读,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O…
定义 Reference是所有引用类型的父类,定义了引用的公共行为和操作. reference指代引用对象本身,referent指代reference引用的对象,下文介绍会以reference,referent形式出现. 说明 Reference类与垃圾回收是密切配合的,所以该类不能被直接子类化.简单来讲,Reference的继承类都是经过严格设计的,甚至连成员变量的先后顺序都不能改变,所以在代码中直接继承Reference类是没有任何意义的.但是可以继承Reference类的子类. 例如:Fi…
数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接如下,可点击跳转: 链接:https://blog.csdn.net/pjh88/article/details/107166950 什么是数组与动态数组? 数组 数组是相同数据类型的元素按照一定的顺序排列的集合,若将有限个类型相同的变量的集合命名,那么这个名称称为数组名,组成数组的各个变量称为数组…
目录 一.Collection接口简介 二.Collection源码分析 三.Collection的子类以及子类的实现 3.1 List extend Collection 3.2 Set extend Collection 3.3 Queue extend Collection 四.Collection和Map的辨析 五.Collection和Collections的辨析 六.总结 一.Collection接口简介 collection在java集合中,算是顶级接口,它继承了iterable接…
0.使用线程池的必要性 在生产环境中,如果为每个任务分配一个线程,会造成许多问题: 线程生命周期的开销非常高.线程的创建和销毁都要付出代价.比如,线程的创建需要时间,延迟处理请求.如果请求的到达率非常高并且请求的处理过程都是轻量级的,那么为每个请求创建线程会消耗大量计算机资源. 资源消耗. 活跃的线程会消耗系统资源,尤其是内存.如果可运行的线程数量多于处理器数量,那么有些线程会闲置.闲置的线程会占用内存,给垃圾回收器带来压力,大量线程在竞争CPU时,还会产生其他的性能开销. 稳定性. 如果线程数…
)TreeMap 是一个有序的key-value集合,它是通过红黑树实现的.因为红黑树是平衡的二叉搜索树,所以其put(包含update操作).get.remove的时间复杂度都为log(n). (2)TreeMap 相比于HashMap多实现了了NavigableMap接口(也就是这个接口,决定了TreeMap与HashMap的不同:HashMap的key是无序的,TreeMap的key是有序的). public class TreeMap<K,V> extends AbstractMap&…