JAVA
熊掌&鱼
持续更新
展开
-
打破双亲委派机制
先来分析ClassLoader的原理,ClassLoader中包含了4个核心方法。双亲委派机制的核心代码就位于loadClass方法中。重要类加载的入口,提供了双亲委派机制。内部会调用findClass。(重要)由类加载器子类实现,获取二进制数据调用 defineClass,比如URLClassLoader会根据文件路径去获取类文件中的二进制数据。(重要)做一些类名的校验,然后调用虚拟机底层的方法将字节码信息加载到虚拟机内存中。执行类生命周期中的连接阶段。原创 2024-05-10 20:18:19 · 1642 阅读 · 0 评论 -
类加载的双亲委派机制
双亲委派机制指的是:当一个类加载器接收到加载类的任务时,会自底向上查找是否加载过,再由顶向下进行加载。类的双亲委派机制是什么?原创 2024-05-09 17:53:32 · 387 阅读 · 0 评论 -
JVM类加载器
类加载器(ClassLoader)是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术。类加载器只参与加载过程中的字节码获取并加载到内存这一部分。原创 2024-05-09 10:45:52 · 590 阅读 · 0 评论 -
int i=0;i=i++;最终i的值是多少?
答案是:0;原创 2024-04-22 11:39:19 · 218 阅读 · 0 评论 -
ConcurrentHashMap的原理
Segment 的结构 和HashMap类似,是一种数组和链表结构,一个Segment 包含一个HashEntry 数组,每个 HashEntry 是一个链表结构的元素,每个 Segment 守护着一个HashEntry数组里的元素,当对 HashEntry 数组的数据进行修改时,必须首先获得对应的 Segment的锁。在jdk1.8中的ConcurrentHashMap 做了较大的优化,性能提升了不少。JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树。原创 2024-04-15 16:12:07 · 219 阅读 · 1 评论 -
HashMap的实现原理
在添加元素或初始化的时候需要调用resize方法进行扩容,第一次添加数据初始化数组长度为16,以后每次每次扩容都是达到了扩容阈值(数组长度 * 0.75) 每次扩容的时候,都是扩容之前容量的2倍;扩容之后,会新创建一个数组,需要把老数组中的数据挪动到新的数组中;原创 2024-04-15 16:10:08 · 292 阅读 · 1 评论 -
ArrayList底层实现
第二:计算数组的容量,如果当前数组已使用长度+1后的大于当前的数组长度,则调用grow方法扩容(原来的1.5倍)第三:确保新增的数据有地方存储之后,则将新元素添加到位于size的位置上。第一:确保数组已使用长度(size)加1之后足够存下下一个数据。第四:返回添加成功布尔值。原创 2024-04-15 16:06:57 · 217 阅读 · 1 评论 -
ReentrantLock的底层原理
ReentrantLock是一个可重入锁,调用 lock 方法获取了锁之后,再次调用 lock,是不会再阻塞,内部直接增加重入次数就行了,标识这个线程已经重复获取一把锁而不需要等待锁的释放。ReentrantLock是属于juc包下的类,属于api层面的锁,跟synchronized一 样,都是悲观锁。它支持公平锁和非公平锁,两者的实现类似构造方法接受一个可选的公平参数( 默认非公平锁 ),当设置为true时,表示公平锁,否则为非公平锁。公平锁的效率往往没有非公平锁的效率高。原创 2024-04-15 16:04:03 · 237 阅读 · 1 评论 -
synchronized和Lock的区别
二者均属于悲观锁、都具备基本的互斥、同步、锁重入功能,Lock 提供了许多 synchronized 不具备的功能,例如获取等待状态、公平锁、可打 断、可超时、多条件变量,同时Lock 可以实现不同的场景,如 ReentrantLock, ReentrantReadWriteLock。在没有竞争时,synchronized 做了很多优化,如偏向锁、轻量级锁,性能不赖,在竞争激烈时,Lock 的实现通常会提供更好的性能,综合来看,需要根据不同的场景来选择不同的锁。原创 2024-04-15 16:01:44 · 114 阅读 · 1 评论 -
JAVA中synchronized关键字的底层原理
synchronized 底层使用的JVM级别中的Monitor 来决定当前线程是否获得了锁,synchronized 属于悲观锁。synchronized 因为需要依赖于JVM级别的Monitor ,相对性能也比较低。原创 2024-04-15 15:57:08 · 328 阅读 · 1 评论