代码改变世界

锁的实现原理

2017-12-25 21:04 by v_ZSW, 8867 阅读, 2 推荐, 收藏, 编辑
摘要:本文将从happens-before关系出发,结合ReentranLock源码,如何用内存屏障、CAS操作、LOCK指令实现锁的功能。 阅读全文

Volatile实现原理

2017-12-25 11:33 by v_ZSW, 1952 阅读, 0 推荐, 收藏, 编辑
摘要:读写volatile变量就像是访问一个同步块一样,是原子的且是可见的,总是能访问到最新的值。其底层使用了Lock前缀和内存屏障保证可见性。 阅读全文

内存屏障保证缓存一致性

2017-12-24 15:37 by v_ZSW, 2778 阅读, 3 推荐, 收藏, 编辑
摘要:缓存一致性协议给缓存行(通常为64字节)定义了个状态:独占(exclusive)、共享(share)、修改(modified)、失效(invalid),用来描述该缓存行是否被多处理器共享、是否修改。所以缓存一致性协议也称MESI。 阅读全文

从源代码到Runtime发生的重排序

2017-12-22 15:52 by v_ZSW, 936 阅读, 0 推荐, 收藏, 编辑
摘要:源代码和Runtime时执行的代码很可能不一样,这是因为编译器、处理器常常会为了追求性能而改变执行顺序。然而重排序很危险,很有可能使得运行结果和预想的不一样,特别是当重排序共享变量时。 从源代码到Runtime需要经过三步的重排序:编译器重排序->指令重排序->内存系统重排序编译器重排序。 阅读全文

Java内存模型—JMM

2017-12-21 16:51 by v_ZSW, 674 阅读, 0 推荐, 收藏, 编辑
摘要:有时候编译器、处理器的优化会导致runtime与我们设想的不一样,为此Java对编译器和处理器做了一些限制,JAVA内存模型(JMM)将这些抽象出来,这样编写代码时就无需考虑那么多底层细节,并保证“只要遵循JMM的规则编写程序,其运行结果一定是正确的”。 阅读全文

锁原理:偏向锁、轻量锁、重量锁

2017-12-18 16:29 by v_ZSW, 11349 阅读, 1 推荐, 收藏, 编辑
摘要:java中每个对象都可作为锁,锁有四种级别,按照量级从轻到重分为:无锁、偏向锁、轻量级锁、重量级锁。每个对象一开始都是无锁的,随着线程间争夺锁,越激烈,锁的级别越高,并且锁只能升级不能降级。 阅读全文

操作系统启动顺序

2016-11-15 13:22 by v_ZSW, 784 阅读, 1 推荐, 收藏, 编辑
摘要:概述 在这里以x86的处理器为例 机器在启动的时候会执行 第一条指令 。这条指令会去执行 bios ,将控制权交给bios。 bios完成硬件的质检,然后将bootloader从硬盘读到内存中,执行 bootloader ,并将控制权交给bootloader bootloader负责使能保护模式、建 阅读全文

web服务器集群

2016-11-07 22:48 by v_ZSW, 6625 阅读, 5 推荐, 收藏, 编辑
摘要:概述 集群和分布式都是从集中式 进化 而来的。分布式和集群会相互合作的,同时的集群和分布式。在这里重点说说集群 集群是什么? 集群能提高单位时间内处理的任务数量,提升服务器性能 有多台服务器去处理任务,但是 每个任务都是由一台服务器独立完成的 分布式是什么? 分布式能缩短单个任务处理的时间 跟集群一 阅读全文

jvm内存溢出分析

2016-11-07 13:47 by v_ZSW, 6529 阅读, 3 推荐, 收藏, 编辑
摘要:概述 jvm中除了程序计数器,其他的区域都有可能会发生内存溢出 内存溢出是什么? 当程序需要申请内存的时候,由于没有足够的内存,此时就会抛出OutOfMemoryError,这就是内存溢出 内存溢出和内存泄漏有什么区别? 内存泄漏是由于使用不当,把一部分内存“丢掉了”,导致这部分内存不可用。 当在堆 阅读全文

jvm内存区域

2016-11-05 15:16 by v_ZSW, 437 阅读, 0 推荐, 收藏, 编辑
摘要:概述 jvm内存分为几个区域: 程序计数器 虚拟机栈 本地方法栈 堆 方法区 运行时常量池 直接内存 这些内存区域是在 java进程 中细分的,为java程序提供服务 不同的区域存储的内容不一样,生命周期的也不一样 内存区域 程序计数器 这个就跟处理器中的程序计数器的功能差不多,是记录下一条字节码的 阅读全文