摘要:
MESI协议中的状态 CPU中每个缓存行(caceh line)使用4种状态进行标记(使用额外的两位(bit)表示): M: 被修改(Modified) 该缓存行只被缓存在该CPU的缓存中,并且是被修改过的(dirty),即与主存中的数据不一致,该缓存行中的内存需要在未来的某个时间点(允许其它CPU 阅读全文
摘要:
首先什么是原子操作? 原子本意是“不能被进一步分割的最小粒子”,而原子操作意为”不可被中断的一个或一系列操作”; 处理器如何实现原子操作? 首先处理器会自动保证基本的内存操作的原子性:处理器保证从系统内存当中读取或者写入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节的 阅读全文
摘要:
内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。 如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 阅读全文
摘要:
一、为什么需要内存屏障 内存屏障的引入,本质上是由于CPU重排序指令引起的。重排序问题无时无刻不在发生,主要源自以下几种场景: 编译器编译时的优化; 处理器执行时的多发射和乱序优化; 读取和存储指令的优化; 缓存同步顺序(导致可见性问题) 二、内存屏障的分类 barrier()就是compiler提 阅读全文
摘要:
基本定义 上下文切换指的是CPU从一个进程(线程)切换到另一个进程(线程)。 进程是正在执行的一个程序的实例,在Linux中,线程可以算作轻量级进程,线程可以并发执行,并且同一进程创建的线程可以共享同一片地址空间及其它资源,即该进程的进程地址空间及属于该进程的其它资源。 基本原理 上下文切换的基 阅读全文
摘要:
一、什么是垃圾回收器根据垃圾回收器这个名字我们可以知道,其主要作用是用来回收内存中已被判定无用的垃圾对象。但是垃圾回收器在扫描过程中,寻找并标记的其实是还在存活的对象。当查找完全部存活对象后将未标记的对象进行统一的回收。 对于一个垃圾回收器,它其实主要需要完成三件事情 1.分配内存:垃圾回收算法的设 阅读全文
摘要:
这种锁提供了一种简单的读写共享的机制,他的设计偏向于写者,无论是什么情况(没有多个写者竞争的情况),写者都有直接写入的权利(霸道) 顺序锁的设计思想是:对某一个共享数据读取的时候不加锁,写的时候加锁。同时为了保证读取的过程中因为写进程修改了共享区的数据,导致读进程读取数据错误。在读取者和写入者之间引 阅读全文
摘要:
前言 无锁(Lock-free)对象比传统的基于锁的对象提供了显著的性能和可靠性等优点。然而,由于缺乏一个有效可移植的无锁方法来回收这些对象中删除掉的动态节点所占用的内存,成为了在实践中广泛应用该方法的一个主要障碍。风险指针是一种内存管理的方法,允许内存被回收后任意重用。该内存管理方法是无等待的(w 阅读全文
摘要:
算法原理 引用计数算法很简单,它实际上是通过在对象头中分配一个空间来保存该对象被引用的次数。如果该对象被其它对象引用,则它的引用计数加一,如果删除对该对象的引用,那么它的引用计数就减一,当该对象的引用计数为0时,那么该对象就会被回收。 比如说,当我们编写以下代码时, String p = new S 阅读全文