Peakiz Blog

「一切过往 皆为序章」

RoaringBitmap学习

Bitmap优化

0 什么是 RoaringBitmap? BitMap 的基本原理就是用一个bit 位来存放数据状态,适用于大规模数据,但数据状态又不是很多的情况,可以节省大量内存空间。通常被用来判断某个数据存不存在的,比如Bloom Filter等;RoaringBitmap在很多产品中都有使用,如lucene, redis, spark等。 在Java里面一个int类型占4个字节(32bit),假如...

MESI和volatile的关系详解

volatile将MESI退化为强一致性

什么是MESI协议? 现代CPU多核架构中为了协调快速的CPU运算和相对较慢的内存读写速度之间的矛盾,在CPU和内存之间引入了CPU cache: 上图就是简化版的多核CPU架构图,数据先从 Memory 读取到 Cache 中,然后每次 CPU 都从 Cache 中取数据,CPU 如果要修改数据,也是先将数据写入 Cache,然后再由 Cache 刷新至 Memory 中,CPU 以...

List并发修改异常探究

ConcurrentModificationException

0 什么情况下会出现ConcurrentModificationException异常? ConcurrentModificationException继承自RuntimeException; 在使用迭代器或者增强for循环(底层也是利用的迭代器)遍历的时候,使用集合的增删改方法对集合进行更新操作的时候会出现这个异常; 1 2 3 4 5 6 7 8 9 10 List...

Monitor对象全解析

CAS+三大队列(Cxq、EntryList、Waitet)

0 什么是Monitor? Monitor是一个同步工具,或者说是一种同步机制; Monitor的特点: 互斥 提供singnal机制(解决线程间的通信) 可以看到,Monitor的特点刚好对应于锁所要解决的两个问题。事实上Monitor就是一种锁的实现方式。 Monitor的底层实现依赖于操作系统的Mutex Lock。 java中的Monitor:java中的每个对象...

java中的锁总结

jvm内置锁+jdk显示锁

0 java中有哪些锁? 一直以来只知道java中有Synchronized和ReentrantLock这两种常用的锁实现,但是对于java中锁的设计理念,各种互斥、同步接口的实现,以及他们和java对象管程的关系云里雾里的,借此机会梳理汇总一下java中与锁相关的概念及其底层实现。 那么java中有哪些锁? 锁的分类方式有很多种,公平锁/非公平锁、可重入锁、互斥锁/共享锁、乐...

java代码在jvm内存中的具体分布

数据依附于对象而存在

0 JVM内存区域划分 我们都知道,jvm整体由4个部分组成,分别是: 类加载子系统(ClassLoader):负责把文件加载到内存中的 运行时数据区。 运行时数据区(Runtime Data Area):负组织java程序运行时,变量及数据在内存中的分布。 执行引擎(Execution Engine):是一个命令解析器,负责将字节...