java基础
文章平均质量分 85
lance小码匠
go on
展开
-
什么?ConcurrentHashMap居然有bug
是的你没有看错,JDK8版本的ConcurrentHashMap真的有bug,而且不止一个。作为最基础的集合类,我们有必要了解这些bug,让我们使用时能有意识的避开。话不多说,我们直入主题。ConcurrentHashMap有两个bug,这两个bug都和computeIfAbsent方法有关。如果对相同的key执行多次computeIfAbsent,每次都会加锁。如果对一个key嵌套执行computeIfAbsent,而嵌套执行的key的hash值刚好相同时会导致死循环。我们都知道compute原创 2022-04-06 11:46:09 · 1139 阅读 · 0 评论 -
JVM垃圾回收器之深入理解CMS垃圾回收器
前言CMS垃圾回收器是本人理解最深刻的JVM垃圾回收器,CMS是首个可以与用户线程并发的低停顿收集器。随着技术的发展、JDK的更新迭代,CMS这个曾经被寄予厚望的并发垃圾回收器已经慢慢要被时代抛弃了,后面出来的G1,ZGC已经盖过了CMS的光芒,JDK9之后CMS甚至被抛弃为不建议使用。但是后来者都是踩在CMS肩膀上迭代的,你可以在G1中看到大量CMS代码的影子,同时现在国内很多公司依旧还在使用JDK8,无他就因为JDK8是最后开源的商用版本(不过JDK17又能用了。。。。),所以了解CMS垃圾回收器的原原创 2022-03-30 15:31:48 · 910 阅读 · 0 评论 -
JVM内存模型
前言很久没有写博客了,不是自己停止了思考,很多自己对架构、计算原理的领悟比较零散,并且很多都记录在电脑上没有发出来。最近刚好有点时间,就把之前的理解整理出来。今天两年前写的,关于对JVM基础的理解。JVM内存模型内存模型整体上分为程序计数器、JAVA虚拟机栈、本地方法栈、JAVA堆、方法区,其中JAVA堆和方法区是线程共享的,其余的是线程私有无线程安全问题。程序计数器程序计数器是JVM内占用内存比较少的一块区域,线程私有。当执行的是JAVA代码时,记录的值是JAVA字节码指令地址,可以看成是当前线原创 2022-03-11 14:25:54 · 599 阅读 · 0 评论 -
java基础之final关键字
引言java关键字中final关键字绝对是我用的最勤最多的关键字之一。毕竟大量的常量定义总会带上final关键字,为什么常量定义会加上final关键字?final关键字如何用?为什么要用final关键字?接下来让我们聊聊final关键字。用法final关键字可以作用在类上,如果用来修饰类,则该类无法被继承。你如果使用final关键字修饰类,说明你已经很明确不希望该类被继承,不希望该类的方法...原创 2019-02-22 16:09:13 · 162 阅读 · 0 评论 -
java基础之equals方法和hashcode方法
引言java基础系列之前已经剖析过好几个java里面比较关键的关键字了,今天我们来讲讲容易被人忽视的equals方法和hashcode方法。为什么说容易被人忽视,因为这两货就算你理他,也不会出什么问题,java的上帝类Object自带equals方法和hashcode方法,所以不用你操心,然鹅只要你根据业务需求来重写equals方法,就很有可能出错,今天我们就来看看这两个方法。equals方法...原创 2019-02-27 21:00:14 · 226 阅读 · 0 评论 -
java基础之synchronized关键字
引言在java中有两种加锁方式,一种使用同步关键字synchronized,另一种使用concurrent包下的Lock(比如我们所熟知的ReentrantLock)在我刚刚工作的时候很多前辈或者文章都说慎用同步关键字,太重了,很耗性能,与ReentrantLock相比性能没它好。但是好像是在jdk1.6之后(未验证过)特定对同步关键字的实现进行过优化,这两种锁性能已经不相上下了,甚至在某些情况...原创 2019-02-18 15:42:25 · 218 阅读 · 2 评论 -
java基础之如何正确使用volatile
volatile关键字在java多线程中有着比较重要作用,volatile主要作用是可以保持变量在多线程中是实时可见的,是java中提供的最轻量的同步机制。可见性在Java的内存模型中所有的的变量(这里的变量是类全局变量,并不是局部变量,局部变量在方法内并没有线程安全的问题,因为变量随方法调用完成而销毁)都是存放在主内存中的,而每个线程有自己的工作内存,每次线程执行时,会从主内存获取变量的拷贝,对变原创 2017-04-16 15:23:45 · 5891 阅读 · 3 评论 -
java基础之ReentrantLock
引言之前我们说了java的synchronized同步关键字,解析了jdk1.6之后对其进行一系列优化原理分析,今天我们聊一聊java中另一个锁ReentrantLock。synchronized同步关键字实现同步或者说独占是通过JVM底层进行系统调用操作Mutex Lock(互斥锁)实现的,而ReentrantLock则是通过上层代码实现,某种意义上可以说是锁的软实现(当然还是需要通过调用大...原创 2019-03-20 11:29:45 · 455 阅读 · 0 评论