第九周总结
1 数据库架构原理
1.1 数据库架构
连接器
数据库连接器会为每个连接请求分配一块专用的内存空间用于会话上下文管理。建立连接对数据库而言相对比较重,需要花费一定的时间,因此应用程序启动的时候,通常会初始化建立一些数据库连接放在连接池里,这样当处理外部请求执行 SQL 操作的时候,就不需要花费时间建立连接了。
语法分析器
分析器首先进行词法分析,一条 sql 由多个字符串和空格组成,数据库需要分析出这些字符串是什么,代表什么。做完识别之后,进行语法分析。根据词法分析的结果,语法分析器会根据语法规则对 sql 语句进行分析,是否符合 SQL 的语法规则。
语义分析与优化器
语义分析与优化器就是要将各种复杂嵌套的 SQL 进行语义等价转化,得到有限几种关系代数计算结构,并利用索引等信息进一步进行优化。
1.2 索引
聚簇索引
将数据存储与索引放到了一块,找到索引也就找到了数据。
非聚簇索引
非聚簇索引在叶子节点记录的就不是数据行记录,而是聚簇索引,也就是主键。通过非聚簇索引找到主键索引,再通过主键索引找到行记录的过程也被称作回表。
1.3 数据库事务
事务特性 ACID
原子性(Atomicity): 事务要么全部完成,要么全部取消。如果事务崩溃,状态回到事务之前(事务回滚)。
隔离性(Isolation): 如果 2 个事务 T1 和 T2 同时运行,事务 T1 和 T2 最终的结果是相同的,不管 T1 和 T2 谁先结束,隔离性主要依靠锁实现。
持久性(Durability): 一旦事务提交,不管发生什么(崩溃或者出错),数据要保存在数据库中。
一致性(Consistency): 只有合法的数据(依照关系约束和函数约束)才能写入数据库。
2.JVM 虚拟机架构原理
2.1JVM 组成架构
Java 是一种跨平台的语言,JVM 屏蔽了底层系统的不同,为 Java 字节码文件构造了一个统一的运行环境。
2.2Java 字节码
Java 所有的指令有 200 个左右,一个字节( 8 位)可以存储 256 种不同的指令信息,一个这样的字节称为字节码( Bytecode )。在代码的执行过程中, JVM 将字节码解释执行,屏蔽对底层操作系统的依赖, JVM 也可以将字节码编译执行,如果是热点代码,会通过 JIT 动态地编译为机器码,提高执行效率。
字节码执行流程
字节码文件编译过程
类加载器的双亲委托模型
低层次的当前类加载器,不能覆盖更高层次类加载器已经加载的类。如果低层次的类加载器想加载一个未知类,需要上级类加载器确认,只有当上级类加载器没有加载过这个类,也允许加载的时候,才让当前类加载器加载这个未知类。
3.JVM 垃圾回收
JVM 垃圾回收就是将 JVM 堆中的已经不再被使用的对象清理掉,释放宝贵的内存资源。JVM 通过一种可达性分析算法进行垃圾对象的识别,具体过程是:从线程栈帧中的局部变量,或者是方法区的静态变量出发,将这些变量引用的对象进行标记,然后看这些被标记的对象是否引用了其他对象,继续进行标记,所有被标记过的对象都是被使用的对象,而那些没有被标记的对象就是可回收的垃圾对象了。
进行完标记以后,JVM 就会对垃圾对象占用的内存进行回收,回收主要有三种方法
清理:将垃圾对象占据的内存清理掉,其实 JVM 并不会真的将这些垃圾内存进行清理,而
是将这些垃圾对象占用的内存空间标记为空闲,记录在一个空闲列表里,当应用程序需要创
建新对象的时候,就从空闲列表中找一段空闲内存分配给这个新对象。
压缩:从堆空间的头部开始,将存活的对象拷贝放在一段连续的内存空间中,那么其余的空
间就是连续的空闲空间。
复制:将堆空间分成两部分,只在其中一部分创建对象,当这个部分空间用完的时候,将标
记过的可用对象复制到另一个空间中。
评论