- 博客(9)
- 收藏
- 关注
原创 Mybatis的反射
我们都知道Mybatis是ORM框架,主要是实现数据库字段和Java对象的映射,其中用到的就是反射。Mybatis的反射是一个特别强大的模块。 Mybatis的反射这里主要介绍ObjectFactory,Reflector,ReflectorFactory,ObjectWrapper,MetaObject一:ObjectFactory ObjectFactory主要提供了create方法,通过mapper.xml里面的对象路径反射生成对象。DefaultObjectFactory继承了Obje
2020-11-12 12:53:06 1400
原创 Mybatis缓存
我们都知道mybatis有一级缓存和二级缓存,当mapper.xml引入cache标签后就会开启二级缓存。二级缓存是可以多个线程共享的,一级缓存是单个线程独享的。下面笔者就Mybatis的缓存坐一些讲解。一:Mybatis二级缓存的脏读问题 如上图开启二级缓存后DB中的数据A同时加载到了两个2级缓存,我们都知道任何的更新操作都会刷新缓存,此时如果左边的数据A修改某些属性,刷新缓存后数据库数据为修改后的数据,而右边的二级缓存还是原始数据,故造成了脏读。二:从Mybatis源码中了解缓存 我们
2020-11-12 10:10:39 105 1
原创 Mybatis的数据库连接池
Mybatis的数据库连接池 我们都知道Mybatis是和数据库打交道的ORM框架,频繁的创建数据库连接对性能是有影响的,所以使用数据库连接池是非常有必要的。下面我们就Mybatis的DataSource做一些介绍。一:Mybatis的datasource模块 mybatis的数据库连接池采用工厂模式创建UnpooledDataSource和PooledDataSource。代码模块位于org.apache.ibatis.datasource包下面 。提供了jndi
2020-10-23 17:41:37 1674 1
原创 Mybatis的logger
一:Mybatis第三方日志组件我们都知道Mybatis本身是没有提供给日志的实现类,Mybatis的日志是接入了第三方的日志组件并设置了统一的四个级别:trace,warm,debug,error。Mybatis一共接入了5总日志插件并在LogFactory类的静态代码块定义了5种日志的使用顺序。 public final class LogFactory { static { tryImplementation(LogFactory::useSlf4jLogging); try
2020-10-15 23:22:39 817
原创 JVM分带回收机制以及垃圾回收算法
JVM垃圾回收主要是回收堆上的内存,新生代使用的是复制回收算法,老年代使用标记清除(CMS)或标记整理算法。一:垃圾回收算法1:复制算法 复制算法是新生代使用的算法,主要的实现原理是将内存分为两块区域,一块用于存放数据另一块用于将发生垃圾回收后的存活对象整体复制。复制算法回收垃圾后的内存空间是没有内存碎片的。目前新生代使用的是Appel回收方式,大家都知道新生代的对象很多都是朝生夕死的根本活不到下一次GC,所有现在是将新生代分成了3个区域Eden区,From区,To区且按照8:1:1分配大小。新
2020-07-28 15:05:02 487
原创 JVM中的对象及引用
一:JVM中对象创建的过程1:类加载(双亲委派加载class文件)2:检查加载,当new一个对象时先检查对象对应的class文件是否已经被加载,如果没有加载则返回到第一步类加载。3:分配内存:划分内存一般有指针碰撞和空闲列表 指针碰撞用于连续整齐的内存区域,当分配内存后指针后移。 空闲列表用于断断续续的内存空间(CMS垃圾回收后),内存列表会标记哪些内存区域已使用哪些未使用。 分配内存时为了避免多线程造成的影响,一般会选用CAS机制或者本地线程分配缓冲(TLAB)。 CAS机制(Comp
2020-07-23 18:52:34 296 1
原创 JVM内存区域<二>
一:深入理解运行时数据区 有如下代码:JVM执行的具体流程如下: 1:JVM申请内存:JVM通过配置参数或者默认参数向操作系统申请内存,根据内存大小找到内存分配表,将内存段的起始和结束地址返回给JVM。 2:JVM通过配置初始化栈,堆和方法区的大小。 3:将class文件以及文件里面定义的常量和静态变量加载到方法区。 4:上面的代码new了对象,此时会在堆里面创建对象并属性赋值,栈里面会有一个地址指向堆上创建的对象。二:对空间的划分 堆空间主要分为新生代和老年代。新生代又分
2020-07-23 01:59:45 108
原创 JVM内存区域<一>
一:运行时数据区域 java虚拟机运行时会将所管理的内存划分为几个不同的区域。 在JVM中,JVM的内存区域主要包括:虚拟机栈,本地方法栈,程序计数器,堆,方法区。其中虚拟机栈,本地方法栈,程序计数器是线程私有的。线程私有的每个线程会开辟单独的区域,线程共享的是所有的线程共同使用一份内存区域。 还有一个区域是直接内存,它不属于运行时数据区域,但是它还是会被频繁使用。可以理解为没有被虚拟机虚拟化的其他内存(例如操作系统有16G内存,虚拟化了4G,另外的12G就是直接内存,JVM可以通过一些工具使用
2020-07-17 17:14:15 540
原创 JVM基础知识
一:JVM简介:JVM全程是Java Virtual Machine,也就是我们耳熟能详的Java虚拟机。它能够识别.class文件,并且能够解析他的指令,最终调用操作系统上的函数,完成我们想要额操作。
2020-07-17 11:34:13 116
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人