- 博客(11)
- 收藏
- 关注
原创 ReentrantLock加锁原理与源码分析
ReentrantLock加锁原理与源码分析在实际代码开发过程中,只要用到了多线程就会存在数据的安全性问题,实现锁的方式很多;例如:synchronized关键字、Lock实现类、Redis锁,分布式锁等。本文主要讲ReentrantLock(可重入锁)的实现原理一、ReentrantLock的加锁原理...
2021-03-10 15:17:07 646
原创 Netty对象池 Recycler
Netty对象池 Recycler对于为什么要使用对象池,肯定是提高性能啊!对象的创建,回收,再创建;很耗损jvm性能的,所以就有了对象池的概念,Netty通过Recycler管理对象的创建与回收,而在对象回收时,也不是真正的把对象从堆内存中移除了,而是在内存中缓存了,那具体什么时候回收呢?对象有一个WeakReference,GC回收就与弱引用有关了。具体请查看:强引用、软引用、弱引用、虚引用他们之间的区别了。一、对象池组件介绍1、RecyclerRecycler是对所有组件的一个管理,通过
2021-03-05 16:52:49 2374 7
原创 Netty中的二进制运算讲解
Netty中的二进制运算讲解Netty为了提高计算性能,运用了很多二进制运算:位移、取反、取并等等;如果单独看来都很简单,可要运用到一起,就不明白这些运算的作用是什么,下面会针对一种Netty常用的运算方式进行讲解。先看例题:int pageSize = 8192; // 8192就是8Kint subpageOverflowMask = ~(pageSize - 1);//下面这段代码的含义是什么?boolean isTinyOrSmall(int normCapacity) {
2021-03-05 12:03:50 767
原创 mac环境下Maven实现ProtoBuf编译
mac环境下Maven实现protobuf编译1、Maven项目创建:File -> new -> Project… -> 输入项目名称 -> finish:2、在项目中创建proto目录:该目录用来保存.proto文件,此处将proto目录与src目录放置同一级,后面在配置时会用到3、配置pom.xml文件:引入如下项目依赖<dependency> <groupId>com.google.protobuf</groupId>
2020-06-02 18:42:05 2372 2
原创 Java:HotSpot虚拟机是怎样运行字节码的?
Java HotSpot虚拟机是怎样运行字节码的?从虚拟机和底层硬件两个角度分析:1、虚拟机:(1)编译:JRE通过javac命令将.java文件编译成.class文件;(2)加载:将编译之后的.class文件加载到内存中,加载后的java类会存放到内存的方法区中,实际运行时虚拟机会运行方法区中的代码;(3)数据区:虚拟机会划分出堆和栈来存放运行时数据;(4)栈划分:栈划分为java方...
2020-04-28 17:55:55 318
原创 Redis:普通锁和分布式锁实现原理
Redis:普通锁和分布式锁实现原理1、Redis单服务实例实现锁实现锁有以下要求:(1)唯一性:一把锁只能存在一个实例;(2)无死锁:client操作超时自动释放;(3)安全性:只对当前client可操作;唯一性:同一把锁有切只能有一个实例;假如A、B两个client同时有Key这把锁,A和B都有权限同时操作同一数据,那“锁”也就没有了意义,锁存在的意义就是避免同步操作;无死锁:c...
2020-04-27 17:09:04 520
原创 Redis:RDB和AOF两种持久化机制分析
RDB和AOF持久化区别分析1、RDB:Redis DatabaseRDB模式是在单位时间内对数据库进行一次持久化,生成dump.rdb文件,该文件可以复制、编辑、移动;例如:可以设置在每天之内,每间隔一个小时进行一次RDB文件存档,在一个月之内每天进行一次RDB快照存档;存档操作有两种方式:SAVE和BGSAVE下面是SAVE命令示例:如果至少1000个key被修改,则Redis会在每...
2020-04-22 16:59:54 202
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人