![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM源码笔记
文章平均质量分 83
个人源码笔记
为啥我就不胖呢
我随便写写,您随便看看
展开
-
ThreadLocal作用和原理分析
ThreadLocal主要为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。要理解ThreadLocal需要理解下面三个问题:每个线程的变量副本是存储在哪里的?(参考ThreadLocal的get()源码)每个线程都有一个threadLocals成员,引用类型是ThreadLocalMap,以ThreadLocal和ThreadLocal对象声明的变量类型作为参数。这样,我们所使用的ThreadLocal变量的实际数据,通过get函数取值的时候,就是通过取出Thread中th原创 2021-02-22 18:22:15 · 290 阅读 · 0 评论 -
JDK源码阅读 ConcurrentHashMap探秘1
都知道ConcurrentHashMap是线程安全的Map,那么它的线程安全是如何实现的呢?让我们来看一下吧。原创 2020-10-28 16:13:30 · 76 阅读 · 2 评论 -
有点深度的聊聊JDK动态代理
在接触SpringAOP的时候,大家一定会被这神奇的功能所折服,想知道其中的奥秘,底层到底是如何实现的。于是,大家会通过搜索引擎,知道了一个陌生的名词:动态代理,慢慢的又知道了动态代理有多种实现方式,比如 JDK动态代理,Cglib 等等。今天我就来简单说说JDK动态代理。JDK动态代理的简单应用我们还是从一个最简单的例子着手:首先我们需要定义一个接口:public interface...转载 2020-03-22 23:16:14 · 284 阅读 · 0 评论 -
HashMap阅读笔记 也来说说快速失败机制
我发现大部分博文对快速失败机制是这样描述的:在使用迭代器对集合对象进行遍历的时候,如果 A 线程正在对集合进行遍历,此时 B 线程对集合进行修改(增加、删除、修改),或者 A 线程在遍历过程中对集合进行修改,都会导致 A 线程抛出 ConcurrentModificationException 异常。给出的代码示例如下: HashMap hashMap = new HashMap();...原创 2019-07-10 17:50:27 · 482 阅读 · 0 评论 -
HashMap源码阅读笔记 put(K key, V value)实现
先说下众所周知的结论吧,HashMap是个数组加链表(或树)的形式。先来看下类图吧。从类图可以看到,HashMap继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口的。重要字段。 /** * 在第一次使用的时候初始化 自动扩容。当重新分配大小时,其长度总会是2的倍数 */ transient N...原创 2019-07-03 22:55:08 · 229 阅读 · 0 评论 -
SpringBoot源码解析 事件分发(Event)机制实现
事件分发机制源码阅读。原创 2019-06-24 21:00:00 · 1495 阅读 · 0 评论 -
SpringBoot源码解析 关于Exception的骚操作
看到SpringBoot的源码,突然看到个骚操作,跟大家分享下。原创 2019-06-21 21:41:23 · 825 阅读 · 0 评论 -
JVM源码阅读笔记:String为什么要设计为final类型
看String源码时,最显眼的莫过于public final class String implements java.io.Serializable, Comparable<String>, CharSequence那么String为什么要设计为Final类型呢?在String类的源码中,我们可以看到这段注释Strings are constant; their valu...原创 2019-05-28 22:18:43 · 740 阅读 · 0 评论 -
SpringBoot源码解析 内置Tomcat启动流程(二)
在上一篇文章中,我们了解到了Spring是如何启动内置Web服务器的。我们也知道Spring Boot本身是使用Tomcat作为默认服务器的。这又是如何做到的呢?我们来细看下EmbeddedWebApplicationContext中的createEmbeddedServletContainer方法。Spring Boot所支持的WebServer都是在这里初始化并创建的。我们可以看到其先获...原创 2019-01-02 17:57:43 · 2779 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记 类加载器双亲委派模型
从Java虚拟机的角度来讲,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现,是虚拟机自身的一部分;另一种就是所有其他的类加载器,这些类加载器都由Java语言实现,独立于虚拟机外部,并且全都继承自抽象类java.lang.ClassLoader。原创 2019-01-04 11:21:39 · 661 阅读 · 0 评论 -
没事来聊聊ArrayList源码
首先让我们看下ArrayList的类图吧。从类图中可以看到ArrayList类继承AbstractList类并实现了List接口,同时实现Cloneable和Serializable接口使得ArrayLis可克隆并且可序列化。成员变量transient Object[] elementData;elementData用于存储我们添加到ArrayList中的元素。从这里可以确定Array...原创 2018-10-19 17:20:13 · 516 阅读 · 0 评论 -
SpringBoot源码解析 内置Tomcat启动流程(一)
打开源代码过程略去不谈,找到入口方法之后发现有两次调用,而我们实际需要开始关注的是下面这个方法。public static ConfigurableApplicationContext run(Object[] sources, String[] args) { return (new SpringApplication(sources)).run(args);}可以...原创 2018-08-20 15:22:10 · 8838 阅读 · 2 评论 -
Spring:@Component 对比 @Bean
众所周知,@Component注解是在Spring 2.5版本引入的,以便于可以通过路径扫描的方式来替换配置文件。 @Bean是在Spring3.0版本引入的,可以配合使用@Configuration注解来达到完全替换配置文件的目的。 那么,我们是否可以仅使用二者其一?换句话说,二者有何区别呢? 事实上,@Component和@Bean做两个完全不同的事情,不应该混为一谈。 @Compon...翻译 2018-08-07 15:23:32 · 24062 阅读 · 0 评论