最新内容

List集合源码分析(list集合remove)

1.数据结构特点ArrayList底层数据结构是一个数组,查询元素速度快,增删速度稍慢2.几个概念:(1)DEFAULT_CAPACITY: 表示数组的初始大小,默认10(2)size: 表示当前数组的大小(3)modCount: 统计当前数组元素被修改的次数,只要修改,就+13.空参构造方法初始化public ArrayList() {实际大小为{},长度 …

谈到ArrayList,我必问的几个点,看你怎么回答

ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了RandomAccess接口,支持快速随机访问,实际上就是通过下标序号进行快速访问,实现了Cloneable接口,能被克隆。这里列出2个我比较关系的方法(add、remove)一、Add可以发 …

面试官:CopyOnWriteArrayList是如何保证线程安全的?

在我们需要保证线程安全的时候,如果使用到Map,那么我们可以使用线程安全的ConcurrentHashMap,ConcurrentHashMap不仅可以保证线程安全,而且效率也非常不错,那有没有线程安全的List呢?答案是有,那就是CopyOnWriteArrayList。今天我们就一起来了解一下CopyOnWriteArrayList,看它是如何巧妙的保证 …

写入时复制(CopyOnWrite)(复制算读取还是写入)

一、写入时复制(CopyOnWrite)思想写入时复制(CopyOnWrite,简称 COW)思想是计算机程序设计领域中的一种通用优化策略。其核心思想是,如果有多个调用者(Callers)同时访问相同的资源(如内存或者是磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者修改资源内容时,系统才会真正复制一份专用副本(private co …

内存溢出/内存泄漏分析过程(什么是内存溢出, 内存泄露? 他们的区别是什么?)

一、名词解释内存泄漏(memory leak)含义:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。内存溢出(out of memory):简称OOM含义:程序申请内存时,没有足够的内存分配给使用者注:内存泄漏的堆积最终会导致内存溢出二、OOM常见报错信息常见报错有下面2类:java.lan …

图解归并排序(归并排序算法分析)

如果需要查看排版好看的请搜索微信公众号放开我我还能学前言这次我们介绍另一种时间复杂度为O(nlogn)的排序算法叫做归并排序。归并排序在数据量大且数据递增或递减连续性好的情况下,效率比较高,且是O(nlogn)复杂度下唯一一个稳定的排序。自顶向下的归并排序归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列 …

面试官:写时复制(Copy-On-Write)在Java中是如何被应用的吗?

前言写时复制(Copy-on-write,简称COW)是一种计算机程序设计领域的优化策略。其核心思想是,如果有多个调用者同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其他调用者所见到的最初的资源仍然保持不变。这个过 …

「Java基础」谈谈集合.CopyOnWriteArrayList

欢迎关注头条号:Java小野猫本篇主要介绍CopyOnWriteArrayList类,读完本博客你将会了解:什么是COW机制;CopyOnWriteArrayList的实现原理;CopyOnWriteArrayList的使用场景。经过之前的博客介绍,我们知道ArrayList是线程不安全的。要实现线程安全的List,我们可以使用Vector,或者使用Coll …

读多写少?你可以试试CopyOnWriteArrayList

介绍我原来遇到这样一种场景,我们将一些配置信息存在数据库中,但这种配置信息访问的频率非常高,如果每次从数据库中查询,会明显降低效率。后来我就在每次启动项目的时候把数据库中的数据加载到本地缓存中,当配置发生变化时同步更新缓存本地缓存结构如下Map<String, List<Integer>> cache = new Concurrent …

Java堆的使用(java的堆和栈)

Java堆的基本概念Java 堆是虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一作用就是存放对象实例,几乎所有的对象实例都是在这里分配的(不绝对,在虚拟机的优化策略下,也会存在栈上分配、标量替换的情况)。当类加载器读取了类文件后,需要把类、方法、常量、变量放到堆内存中,保存所有引用类型的真实信息,以方便执 …