youyichannel

志于道,据于德,依于仁,游于艺!

0%

happens-before原则

JMM核心概念。

JDK1.5开始,Java使用新的JSR-133内存模型,JSR-133使用happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作(可以是在一个线程之内,也可以是在不同线程之间)之间必须要存在happens-before关系。

阅读全文 »

指令重排序

在执行程序时,为了提高性能,编译器和处理器通常会对指令做重排序,重排序分为3种类型:

  1. 编译器优化的重排序:编译器在不改变单线程语义的前提下,可以重新安排语句的执行顺序
  2. 指令级并行的重排序:现代处理器采用了指令级并行技术(ISP)来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应的机器指令的执行顺序。
  3. 内存系统的重排序:由于处理器使用缓存和读写缓冲区,这使得加载和存储操作看上去可能是在乱序执行。
阅读全文 »

《MySQL是怎样运行的 —— 从跟上理解MySQL》—— 第九章

表空间是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为表名.ibd的实际文件。

可以把表空间理解成被切分为许许多多个的池子,当想为某个表插入一条记录的时候,就从池子中捞出一个对应的页来把数据写进去。

阅读全文 »

《MySQL是怎样运行的 —— 从跟上理解MySQL》—— 第八章

一、数据库和文件系统的关系

InnoDBMyISAM 这样的存储引擎都是把表存储在文件系统上的。当我们想读取数据的时候,这些存储引擎会从文件系统中把数据读出来返回给我们,当我们想写入数据的时候,这些存储引擎会把这些数据又写回文件系统。那么InnoDBMyISAM这两个存储引擎的数据是如何在文件系统中存储的呢?

阅读全文 »

CPU的用户态和内核态

内核态(Kernel Mode):内核态运行的进程几乎可以访问计算机的任何资源包括系统的内存空间、设备、驱动程序等,不受限制,拥有非常高的权限。当操作系统接收到进程的系统调用请求时,就会从用户态切换到内核态,执行相应的系统调用,并将结果返回给进程,最后再从内核态切换回用户态。

用户态(User Mode) : 用户态运行的进程可以直接读取用户程序的数据,拥有较低的权限。当应用程序需要执行某些需要特殊权限的操作,例如读写磁盘、网络通信等,就需要向操作系统发起系统调用请求,进入内核态。

内核态相比用户态拥有更高的特权级别,因此能够执行更底层、更敏感的操作。不过,由于进入内核态需要付出较高的开销(需要进行一系列的上下文切换和权限检查),应该尽量减少进入内核态的次数,以提高系统的性能和稳定性。

阅读全文 »

ObjectMonitor的属性

1)header:重量级锁保存MarkWord的位置。

2)own:指向持有锁的线程,被加锁对象的MarkWord中保存了指向monitor的指针。

3)_cxq队列:竞争队列。线程A持有锁未释放,线程B和C同时过来争抢锁,均被Block,此时线程B和C会被加入该队列中。

4)EntryList队列:同步队列。线程A释放锁,线程B和C中会选定一个继承者(可以去争抢该锁),另一个线程会被放入EntryList队列中。(涉及QMode参考文章

5)WaitSet队列:等待队列。存放Object Wait的线程。

阅读全文 »