前言在mysql数据库InnoDB的使用过程中,事务、事务隔离级别、读锁、写锁等都是绕不开的话题。本文针对事务的特性、隔离级别以及事务隔离级别与锁相关的问题做一些探讨。 事务隔离级别事务ACID特性首先事务拥有ACID四大特征,即: 原子性Atomic:事务不可被分割,同一个事务内的多个数据库操作 ...
jvm(5)-内存模型与线程
前言随着硬件的发展,现在市面上的CPU基本都是多核多线程的CPU,而且计算机的运算速度与存储和通信子系统速度差距太大,导致大量时机都花费在磁盘I/O、网络通信、数据库访问上。如果不能很好的利用CPU资源,就会造成资源极大的浪费。为充分利用CPU资源,Java中引入高并发和多线程,为更好的使用这些利器 ...
jvm(3)--类加载
前言用户代码经过编译生成符合jvm规范的CLASS文件,将本地机器码转化为字节码。之后在虚拟机启动程序时将CLASS文件中的类加载带到内存当中,供程序使用。本博客结合周志明先生的《深入理解Java虚拟机》对这些知识点进行梳理验证。 类加载时机类的生命周期包括:加载、验证、准备、解析、初始化、使用、卸 ...
jvm(2)--gc垃圾回收器
前言:java与C++最大的不同点:内存管理java交由虚拟机管理,无需开发用户自己分配与管理,而C++需要自己分配并释放内存。而java内存的回收是由垃圾收集器完成,接下来我们讨论垃圾回收的几个问题: 回收那些内存? 何时回收? 怎么回收? 垃圾回收目标jvm内存分区及管理请移步java内存管 ...
jvm(1)--内存管理
内存分区jvm内存主要分为以下几块: 堆:实例对象和数组 方法区:类变量、常量、类信息、即时编译器编译后的代码 运行时常量池:class文件的常量池 虚拟机栈:局部变量、操作栈、动态链接、方法返回地址 本地方法栈:Native方法 程序计数器:当前线程执行的字节码的行号指示器 直接内存:不属于 ...
jvm(4)--线程安全
前言在操作系统中,一段时间内只允许一个进程访问的资源成为临界资源。包括软件临界资源和硬件临界资源,例如打印机、栈、变量、表格等。进程中访问临界资源的代码片段成为临界区,按照临界资源的特征,临界区的代码要实现对临界资源的互斥访问。 硬件同步机制现在,大多数情况通过硬件来解决临界区的同步问题。硬件同步方 ...