自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(6)
  • 问答 (1)
  • 收藏
  • 关注

原创 Atomic类怎么保证原子性

如果这个业务中读的操作较多,或者切换线程带来的开销远远大于同步数据的时间,我们可以采用乐观锁来编程,其实乐观锁这个称呼更好的叫法应该是无锁,这个是由于CPU底层提供了CAS指令,进入getIntVolatile和compareAndSwapInt方法,发现这两个是被native修饰的方法,被native修饰的方法可以理解为Java和C语言的接口,由于Java没有自己调用底层的指令,所以需要C语言来实现,jdk的源码查看需要sun公司授权,所以我们到openjdk中找到对应的源码。,上层进行调用即可。

2024-02-28 15:27:33 510

原创 JAVA线程上下文的切换分析与调优

CPU切换线程需要记住上一个线程的状态,这样再次切换回来的时候才知道之前执行到了哪里,然后继续执行上次未执行完的步骤。切换上下文和创建线程会产生开销,所以对CPU来说,多线程不一定意味着快,哪怕是多核。(这里切换上下文带来的开销主要是用户态和内核态之间的切换,一般来说在几微秒。哪怕线程A时间片用完切换到现场B,时钟中断发生,也需要切换内核态)如果发现waiting的线程太多,查看一下线程信息文件demo.txt。使用vmstat可以测量上下文切换的次数。可以获取线程信息文件。

2024-02-25 21:49:06 407

原创 Redis为什么要采取SDS结构以及SDS在对象中的应用

buf属性是一个char类型的数组,数组的前五个字节分别保存了'R'、'e'、'd'、'i'、's'五个字符,而最后一个字节则保存了空字符'\0'。len的长度为5说明保存了一个长度为5的字符串,Free的值为0,说明没有未分配空间,这是一个记录Redis字符串的实例,

2024-02-21 13:16:06 744

原创 JAVA类加载机制以及双亲委派

将类中的符号引用变成直接引用,比如A要知道B的地址,这个代表B地址的字符串就称为符号引用,在运行时,A发生类加载的时候,根据这个符号引用去找到B,如果B还未被加载,那就会把B加载到虚拟机中,然后把符号引用替换为B的实际地址,也就是直接引用,但B有可能是接口或者多态,此时B的具体实现并不明确,也不知道用哪个类的具体实现来替换符号引用,在运行过程中发生调用的时候会,此时虚拟机会有具体的类型信息,这时候再解析就可以用直接引用来替换符号引用,这个的好处是每一个限定名的类在程序中都是唯一的,不会产生歧义。

2024-02-16 17:29:48 404 1

原创 Redis缓存穿透、雪崩、击穿原因及解决方案

因为会出现缓存击穿的情况是都是并发量很大,如果给进程上锁,一把锁肯定锁不住,这种情况对性能消耗太大了,所以选择采用分布式锁,但是这时候有可能出现一种情况就是锁上了但是还没执行完成就宕机了,那其他进程就会一直在等待锁的释放,造成资源消耗,这时候需要对锁设置过期时间,但是设置过期时间也会产生问题,因为过期时间是在上锁之后设置的,所以有可能出现一种情况,在Redis上锁之后,还没来得及设置过期时间就宕机了,那其他线程还是在等待。产生原因:大量请求同时访问一个热点key,此时key过期,请求打到db上。

2023-11-13 13:16:18 40

原创 浅谈JAVA中的无锁、偏向锁、轻量级锁

1、导入依赖2、了解Java对象结构对象结构由对象头,对象实例数据和对齐填充组成,而本文主要是通过解析对象头的MarkWord来分析锁的状态以及膨胀过程,以下是Markword在64位操作系统下的结构图。

2023-10-28 15:05:49 141

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除