Java虚拟机-线程安全与锁优化

线程安全当多个线程同时访问一个对象时,如果不用考虑这些线程在运行环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象是线程安全的。线程安全的实现方法1、互斥同步互斥同步是一种最常见也是最主要的并发正确性保障手段。同

Java虚拟机-Java内存模型与线程

Java内存模型主内存和工作内存Java内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到内存和从内存中取出变量值这样的底层细节。此处的变量与Java编程中所说的变量有所区别,它包括了实例字段、静态字段和构成数组对象的元素,但是不包括局部变量与方法参数,因为后者是线程私

Java虚拟机-类加载机制

概述Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称为虚拟机的类加载机制。类加载的时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Ver

Java虚拟机-垃圾收集器与内存分配策略

概述垃圾收集器主要完成三件事情:1、哪些内存需要回收2、什么时候回收3、如何回收在Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就

Redis设计与实现-复制

概述在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则称为从服务器(slave)。假设现在有两个Redis服务器,地址分别为127.0.0

Redis设计与实现-客户端

概述Redis服务是典型的一对多服务器程序:一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复。通过使用IO多路复用技术实现的文件事件处理器,Redis服务器使用单线程单进程的方式来处理命令请求,并与多个客户端

Redis设计与实现-事件

概述Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:1、文件事件(file event):Redis服务器通过对套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其他服务器)的通信会产生相应的文件事件,而服务器则通过监听并

Redis设计与实现-AOF持久化

概述除了RDB持久化功能之外,Redis还提供了AOF(Append Only File)持久化功能。与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。举个例子,如果我们对空白的数据库执行以下命令,那么数据库中将包含三

InnoDB存储引擎笔记-文件

概述本章将分析构成MySQL数据库和InnoDB存储引擎表的各种类型文件。这些文件有以下这些。参数文件:告诉MySQL实例启动时在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还会介绍各种参数的类型。日志文件:用来记录MySQL实例对某种条件做出响应时写入的