自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 JDK1.7中的hashMap源码分析

JDK1.7中的hashMap重要属性/** * The default initial capacity - MUST be a power of two. * 默认初始化的容量,必须是2的幂 */static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16/** * The maximum capacity, used if a higher value is implicitly specified * by

2021-10-09 22:21:41 213

原创 Mybatis执行器

Mybatis执行器Mybatis执行过程中的四个模块:动态代理MapperProxySQL会话SqlSession执行器ExecutorJDBC执行器StatementHandler会话提供基础的Api功能,具体实现交给指定的executor执行简单执行器——SimpleExecutor无论sql是否一样,每次都会进行预编译可重用执行器——ReuseExecutor批处理执行器——BatchExecutor批处理只针对修改操作进行批处理,查询操作还是会多次预编译

2021-09-28 09:58:27 297

原创 Mybatis二级缓存

Mybatis二级缓存二级缓存应有的需求二级缓存也称作是应用级缓存,与一级缓存不同的是它的作用范围是整个应用,而且可以跨线程使用。所以二级缓存有更高的命中率,适合缓存一些修改较少的数据存储方式:内存、硬盘、第三方集成…溢出淘汰策略:FIFO先进先出、LRU最近最少使用…过期清理、线程安全、命中率统计、序列化…Mybatis使用装饰器+责任链的形式来实现缓存的所有需求二级缓存的命中运行时参数相关会话提交后sql语句、参数相同相同的statementIdRowBounds相同

2021-09-28 09:55:43 131

原创 垃圾回收的相关算法

垃圾回收的相关算法标记阶段——引用计数算法在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,Gc才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。判断对象存活一般有两种方式:引用计数算法和可达性分析算法引用计数算法(Refer

2021-09-28 09:51:57 133

原创 字符串常量池

String TableString的基本特性string :字符书:使用一对""引起来表示。string声明为final的,不可被继承string实现了serializable接口:表示字符串是支持序列化的。实现了comparable接口:表示string可以比较大小string在jdk8及以前内部定义了final char [ ] value用于存储字符串数据。jdk9时改为byte[]String在JDK9中存储方式变更的原因https://openjdk.java.net/jeps

2021-09-28 09:51:09 196

原创 运行时数据区

运行时数据区红色的由线程共享,跟jvm的生命周期一致,灰色的由线程私有方法区就是元数据区+jit编译产物区 方法区的概念比较笼统PC寄存器(program counter register)它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的Java方法的JVM指令地址;或者,如果

2021-09-27 18:37:00 61

原创 JVM方法区

方法区栈、堆、方法区的交互关系方法区的理解The Java Virtual Machine has a method area that is shared among all Java Virtual Machine threads. The method area is analogous to the storage area for compiled code of a conventional language or analogous to the "text" segment in

2021-09-27 18:25:29 116

原创 JVM堆空间

堆一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。. Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区( ThreadLocal Allocation Buffer,TLAB)。《Java虚拟机规范》中对Java堆的描述是:所有的对象实例以及数组都应当在运

2021-09-27 18:24:16 89

原创 JVM虚拟机栈

虚拟机栈每个 Java 虚拟机线程都有一个私有的Java 虚拟机堆栈,与线程同时创建。Java 虚拟机堆栈存储帧(第2.6 节)。Java 虚拟机堆栈类似于 C 等传统语言的堆栈:它保存局部变量和部分结果,并在方法调用和返回中发挥作用。因为除了推送和弹出帧之外,Java 虚拟机堆栈从不直接操作,所以帧可能被分配到堆上。Java 虚拟机堆栈的内存不需要是连续的。在第一版中的Java ®虚拟机规范,Java虚拟机堆被称为Java堆栈。该规范允许 Java 虚拟机堆栈具有固定大小或根据计算需要动态扩展和收缩

2021-09-27 18:21:36 122

原创 类加载器的分类

类加载器的分类JVM支持两种类型的类加载器,分别为引导类加载器(BootstrapClassLoader)和自定义类加载器TUser-Defined ClassLoader) 。从概念上来讲,自定义类加载器一般指的是程序中由开发人员自定义的一类类加载器,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器。无论类加载器的类型如何划分,在程序中我们最常见的类加载器始终只有3个,如下所示:1.启动类加载器(引导类加载器,BootStrap

2021-09-27 18:09:14 153

原创 JVM类的加载过程

JVM类的加载过程1.加载Loading1.1通过一个类的全限定名获取定义此类的二进制字节流1.2将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构1.3在内存中生存一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口2.链接Linking2.1验证(Verify) :目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求,保证被加载类的正确性,不会危害虚拟机自身安全。主要包括四种验证,文件格式验证,元数据验证,字节码验证,符号引用验证

2021-09-27 18:07:22 335

原创 Mybatis之拦截链

Mybatis之拦截链Mybatis采用责任链模式,通过动态代理组织多个拦截器(插件),通过这些拦截器可以改变Mybatis的默认行为(诸如SQL重写之类的),由于插件会深入到Mybatis的核心,因此在编写自己的插件前最好了解下它的原理,以便写出安全高效的插件。拦截器(Interceptor)在 Mybatis 中被当做插件(plugin)对待,官方文档提供了 Executor,ParameterHandler,ResultSetHandler,StatementHandler 共4种,我们这次借鉴M

2021-03-29 00:47:27 495

原创 Mybatis源码解析之Mapper动态代理

Mybatis源码解析之Mapper动态代理概述在使用Mybatis执行sql语句时,第一步就是调用我们自定义的Mapper执行相应的方法,Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同Dao接口实现类方法。这里详细的分析一下Mybatis是如何做到的。前期准备跟上次调试代码一样,这次我们把断点打到getMapper这一步代码调试进入sqlSession.getMapper(UsersMapper.class);发现调用了configuration的getMappe

2021-03-21 20:44:33 189

原创 Mybatis源码解析之Mapper与xml的加载和关联

Mybatis源码解析之Mapper与xml的加载和关联什么是 MyBatis?我们去Mybatis的官方文档看一下Mybatis的介绍MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。我们进入实战查看M

2021-03-21 01:50:11 1106 3

原创 JAVA集合之LinkedList源码解析

JAVA集合之LinkedList源码解析上一篇讲完ArrayList之后,我们继续进入List的下一个目标:LinkedList(我们不讲Vector了,因为它跟ArrayList只有线程安全和其他一些细微的差别,建议大家自行阅读源码)LinkedList特性:排序有序,可重复底层使用双向循环列表结构读取速度慢,增删速度快线程不安全源码解析继承关系简介{@code List}和{@code Deque}接口的双链列表实现。实现所有可选的列表操作,并允许所有元素(包括{@code

2020-12-18 18:07:23 234 2

原创 JAVA集合之ArrayList源码解析

JAVA集合之ArrayList源码解析本人想写博客很久了,这是我的第一篇博客,之后我也会陆陆续续的把JAVA的集合篇补全,废话不多说,让我们开始曹飞ArrayList(1.8JDK)。继承关系在上图我们可以看到ArrayList的继承关系和优缺点排序有序,可重复底层使用数组读取速度快,增删速度慢线程不安全按1.5倍扩容接下来,我将从源码层分析为何ArrayList具有此种特性。源码解析我们看源码,一定要先看它的注释/** * Resizable-array implement

2020-12-07 22:44:56 1194 6

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除