04 2020 档案
摘要:堆内存常见的分配策略 针对的是Serial 加 Serial Old 客户端默认收集器组合下的内存分配和回收策略 经典的垃圾收集器 CMS 收集器 CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的垃圾收集器。从名字可以看出,CMS 是基于标记-清除算法的
阅读全文
摘要:4.1 String 类和常量池 String 对象的两种创建方式: String str1 = "abcd";//先检查字符串常量池中有没有"abcd",如果字符串常量池中没有,则创建一个,然后 str1 指向字符串常量池中的对象,如果有,则直接将 str1 指向"abcd""; String s
阅读全文
摘要:2.3.1 Java 对象的创建过程(五步) 下图便是 Java 对象的创建过程,我建议最好是能默写出来,并且要掌握每一步在做什么 Step1:类加载检查 虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解
阅读全文
摘要:2.1 概述 对Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每个对象的new操作去写配对的delete/free 代码,不容易出现内存泄露和内存溢出的问题。不过,仍然需要Java虚拟机是如何使用内存的,方便我们定位内存泄露和内存溢出的问题: 2.2 运行时数据区域 Java虚拟机
阅读全文
摘要:// 每个链表节点使用一个 ListNode 结构来表示typedef struct ListNode{ //前置节点 struct ListNode *prev; //后置节点 struct ListNode *next; //节点值 void *value; } ListNode; // typ
阅读全文
摘要:2.1 SDS的定义 struct { //buf中已使用的字节数,等于SDS所保存字符串的长度 int len; //buf中未使用的字节长度 int free; //字节数组,用于保存字符串 char[] buf; } 2.2 SDS与C字符串的区别 C字符串 SDS 获取字符串长度的复杂度为
阅读全文
摘要:大多数情况是正常的,只是偶尔会出现很慢的情况 网络问题 数据库在刷新脏页 获取锁失败,我们可以用 show processlist这个命令来查看当前的状态 刷脏页有下面4种场景(后两种不用太关注“性能”问题): redolog写满了:redo log 里的容量是有限的,如果数据库一直很忙,更新又很频
阅读全文
摘要:7.2 事务的实现 原子性、一致性、持久性通过数据库的redo log和undo log 来完成,redo log 称为重做日志,用来保证事务的原子性和持久性。undo log 用来保证事务的一致性。 redo log 和undo log 的作用可以视为是一种恢复操作,redo 恢复提交事务修改的页
阅读全文
摘要:开发多用户、数据库驱动的应用时,最大的难点是:一方面要最大程度的利用数据库的并发访问,一方面还要确保每个用户能以一致的方式读取和修改数据,为此有了锁的机制。 6.1 什么是锁 锁机制用于管理对共享资源的并发访问。InnoDB除了会在行级别上对表数据上锁,也会在数据库内部其他多个地方上锁,从而允许对多
阅读全文
摘要:5.3 B+ 树 B+ 树是为磁盘或其他直接存储辅助设备设计的一种平衡查找树。在B+树中,所有记录都是按照键值大小顺序存放在同一层的叶子节点上,由叶子节点指针进行连接,双向链表连接。 5.3.1 B+ 树的插入操作 考虑一下三种情况: Leaf Page满 Index Page 满 操作 No No
阅读全文
摘要:本章将重点分析表的物理存储特征,即数据在表中是如何组织存放的。也就是说,表就是关于特定实体的数据集合,这也是关系型数据库模型的核心。 4.1 索引组织表 在 InnoDB存储引擎中,表都是按照主键顺序存放的,这样的存储方式的表称为索引组织表。如果创建表时没有显式的定义主键,则按照如下方式选择或创建主
阅读全文
摘要:3.5 表结构定义文件 MySQL 都有一个以frm为后缀的文件,该文件记录了该表的表结构定义。 frm还用来存放视图的定义,如用户创建了一个v_a 视图,那么对应会产生一个v_a.frm 文件,用来记录视图的定义。该文件是文本文件,可用cat查看。 3.6 InnoDB存储引擎文件 InnoDB文
阅读全文
摘要:2.1 InnoDB存储引擎概述 InnoDB存储引擎是第一个完整支持ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效的利用内存和CPU。 2.2 InnoDB存储引擎版本 从MySQL5.1 版本时,MySQL数据库允许存储引擎开
阅读全文
摘要:一、MySQL体系结构和存储引擎 尽管各个平台在底层(如线程)实现方面都各不相同,但MySQL基本上能保证在各个平台上的物理结构的一致性。因此,用户应该能很好的理解MySQL数据库在所有这些平台是如何运作的。 1.1 定义数据库和实例 数据库:物理操作系统文件或其他形式文件类型的集合。在MySQL数
阅读全文
摘要:14. 线程安全与锁优化 1. 什么是线程安全? 当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替进行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象是线程安全的 2. Java语言中的线程安全 我们将J
阅读全文
摘要:13.Java内存模型与线程 1.Java内存模型 Java 内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到主内存和从内存中取出变量值的底层细节 该变量指的是 实例字段、静态字段、和构成数组对象的元素,不包含线程私有的 局部变量和方法参数 Java线程 -》 工作内
阅读全文