摘要:bean的生命周期把它总结为以下几个阶段 实例化 属性注入/依赖注入 初始化 销毁 其中实例化、属性注入、初始化属于bean创建的过程。 bean创建的过程流程图 (1)当spring容器在启动的时候或者启动完成后显示调用getBean方法时来获取bean实例的时候,都会调用这个doGetBean方 阅读全文
posted @ 2020-05-10 01:31 cao_xiaobo 阅读(1224) 评论(0) 推荐(0) 编辑
摘要:调试分析 由于源码一步一步调试效率太低了,所以我这里就直接在自定义的Filter类上的doFilter方法中打上断点 先通过线程栈来大致看一下,请求的过程中执行了哪些步骤 每一个方法点进去,然后给它整理成一张表格,如下: 分析: 上图执行执行次数最多的方法是invoke 所有调用invoke方法的类 阅读全文
posted @ 2020-05-09 23:36 cao_xiaobo 阅读(346) 评论(0) 推荐(0) 编辑
摘要:线程上下文切换(Thread Context Switch ) 定义 CPU执行线程的时候是通过时间分片的方式来轮流执行的,当某一个线程的时间片用完(到期),那么这个线程就会被中断,CPU不再执行当前线程,CPU会把使用权给其它线程来执行。如T1线程未执行结束,T2/T3线程插进来执行了,若干时间后 阅读全文
posted @ 2020-05-01 18:20 cao_xiaobo 阅读(632) 评论(0) 推荐(0) 编辑
摘要:一、自旋锁与互斥锁 java中的锁整体分为两大类,基于synchronized关键字的互斥锁和基于CAS操作的自旋锁 synchronized:串行执行阻塞的、用户态内存态切换的重量级锁。(监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的) CAS:非阻塞的自旋、线程上下文切换 异 阅读全文
posted @ 2020-04-30 18:30 cao_xiaobo 阅读(92) 评论(0) 推荐(0) 编辑
摘要:一、synchronized 的原理 JVM 基于进入和推出Monitor对象来实现方法和同步代码块,但两者的实现细节不同。 synchronize 修饰的同步代码块:使用monitorenter 和 monitorexit 指令实现; synchronize 修饰的方法并没有 monitorent 阅读全文
posted @ 2020-04-27 15:45 cao_xiaobo 阅读(824) 评论(0) 推荐(0) 编辑
摘要:前言 Java中提供这四种引用类型主要有两个目的: 可以让程序员通过代码的方式决定某些对象的生命周期; 有利于JVM进行垃圾回收 java.lang.ref包下的引用类结构图 一、强引用 特点:GC时,永远不会被回收 是指创建一个对象并把这个对象赋给一个引用变量。比如: Object object 阅读全文
posted @ 2020-04-27 02:37 cao_xiaobo 阅读(497) 评论(0) 推荐(0) 编辑
摘要:恢复内容开始 一、为什么要使用类加载器? Java语言里,类加载都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会给java应用程序提供高度的灵活性。例如: 1.编写一个面向接口的应用程序,可能等到运行时再指定其实现的子类; 2.用户可以自定义一个类加载器,让程序在运行时 阅读全文
posted @ 2020-04-26 02:11 cao_xiaobo 阅读(71) 评论(0) 推荐(0) 编辑
摘要:对象头在32位系统上占用8B,64位系统上占16B。 无论是32位系统还是64位系统,对象都采用8字节对齐。Java在64位模式下开启指针压缩,比32位模式下,头部会大4B(mark区域变位8B,kclass区域被压缩),如果没有开启指针压缩,头部会大8B(mark和kclass都是8B),换句话说 阅读全文
posted @ 2020-04-20 04:31 cao_xiaobo 阅读(426) 评论(0) 推荐(0) 编辑
摘要:HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding) 1.对象头 HotSpot虚拟机的对象头(Object Header)包括两部分信息, (1)第一部分MarkWord:用于存储对象自身的运行时 阅读全文
posted @ 2020-04-20 04:24 cao_xiaobo 阅读(343) 评论(0) 推荐(0) 编辑
摘要:栈帧中存储的有 局部变量表 操作数栈(或表达式栈) 动态链接(或指向运行时常量池的方法引用) 方法返回地址(或方法正常退出时或者异常退出时的定义) 一些附加信息 一、局部变量表 是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。在 Java 程序编译为 Class 文件时,就在方法的 阅读全文
posted @ 2020-04-20 04:20 cao_xiaobo 阅读(122) 评论(0) 推荐(0) 编辑