自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 MySQL笔记

数据库是用来存储数据的,文件系统也可以用来存储数据,为什么不直接使用文件系统管理数据,而需要数据库软件呢?

2023-05-03 11:04:36 133

原创 理解Java并发(三)理解ReentrantReadWriteLock

引言:相较于互斥锁,读写锁在保证数据的安全性的基础上提高了性能,不过不能保证数据的实时可见性,这需要锁降级来规避。

2023-02-26 13:29:28 87

原创 理解Java并发(二)理解ReentrantLock

引言:ReentrantLock是JUC包中比较经典的同步组件,理解ReentrantLock有利于理解JUC包的实现逻辑。ReentrantLock的特点是互斥和可重入,支持线程公平和非公平获取资源。

2023-02-22 22:48:36 157

原创 理解Java并发(一)JVM层面对于并发问题的解决

引言:在JUC没有出现之前,Java提供了volatile,synchronized ,final等同步原语给程序员来解决并发问题,探究这些同步原语的实现有利于理清解决进程/线程并发问题的思路和理解JUC的实现。

2021-09-19 20:48:08 639

原创 探究JVM(九)G1垃圾收集器的工作原理

引言:G1垃圾收集器创造性地把堆空间分为若干个区域(Region),通过选定CSet的方式来控制垃圾回收的区域,可以较为精确控制垃圾回收的效益和成本,此外,G1垃圾收集器在整体上采用标记-整理的方式,加大了吞吐量。总而言之,G1垃圾收集器是一款兼顾响应速度和吞吐量的垃圾收集器。

2021-09-13 15:45:37 247

原创 探究JVM(八)简单易懂的CMS垃圾收集器,一下子就清楚工作流程

引言:CMS是第一款用户线程能够和收集器线程同时工作的垃圾收集器。相较于后来的G1和ZGC垃圾收集器来说,CMS的工作流程简单,易于理解。

2021-06-20 11:53:11 275

原创 探究JVM(七)手敲6000字!从论文角度剖析增量更新和原始快照

引言:在JVM中,使用可达性分析算法来判断一个对象是否存活。在Serial和Parallel收集器中,可达性分析的过程是STW的,这意味着在标记的过程中,对象的引用关系没有发生改变,从GC Root开始扫描,可以得到全部存活的对象。但是在CMS,G1等垃圾收集器中,采用了并发标记的方式来遍历对象图,毫无疑问,这缩短了STW的时间,但是也带来了新的问题,而增量更新和原始快照就是用来解决这个问题的不同方式。一 并发标记的问题采用了并发标记,可以让用户线程和GC线程同时工作,但是也带来了新的问题。1 浮动垃

2021-06-10 15:24:44 2405 3

原创 探究JVM(六)判断对象是否存活?可达性分析算法

引言:JVM在进行GC的时候,要确定哪些对象是存活的,或者说哪些对象正在被使用,这些正在使用的对象是不能进行回收的。那么如何确定这个对象是否存活呢?

2021-06-07 20:33:32 182

原创 探究JVM(五)一张图搞定G1垃圾回收器的记忆集

引言:在前面两篇博文中,主要讲述的是经典垃圾回收器中的记忆集,在经典垃圾回收器中,记忆集主要通过Card Table来实现。而在G1垃圾回收器中,记忆集的结构发生了较大改变。为什么单纯的Card Table结构不再适用?在G1垃圾回收器中,老年代和新生代的划分不再固定,取而代之的是整个堆被分成了若干个Region,每一个Region可以被当做Old,Eden,Survivor,Humongous 区域来使用。如果这时候再使用Card Table结构,就要对整个堆进行划分卡页(因为老年代不是固定的),这显

2021-06-05 18:53:52 1042 14

原创 Redis6.2.5源码阅读(一)五大基础对象

理解Redis中的五大基本数据结构

2021-06-04 20:45:08 108

原创 探究JVM(四)利用写屏障技术来维护记忆集

引言:在JVM中,使用到了记忆集这种数据结构来解决跨代引用的问题,使得仅花费很小的代价就知道了哪些老年代区域上的对象包含了指向新生代的指针,从而避免了扫描整个老年代。但是现在有一个问题,由于在运行的过程中,引用关系可能随时发生改变,那么怎么样让虚拟机即使知道这种变化,并且记录下来呢?写屏障技术就闪亮登场了!什么是写屏障技术?大家都知道,在Spring框架中,采用了AOP来增强Bean实例的方法,写屏障技术和AOP技术类似,AOP技术在方法的前后增加特定的环节来增强目标方法的功能,写屏障技术在写操作的前后

2021-06-03 12:58:17 324

原创 探究JVM(三) 经典收集器的记忆集

引言:基于经典分代理论,虚拟机的堆内存可以划分成新生代,老年代。当虚拟机需要仅对新生代进行回收时(Minor GC),新生代中可能存在跨代引用,即老年代的对象中有指向新生代对象的引用。为此,正常情况下需要扫描整个老年代来确定哪些对象引用了新生代的对象,但这种方式的开销太大,所以JVM引入了记忆集的概念,采用记忆集的方式,能有效减小开销。G1收集器出现之前的记忆集首先,我们要了解记忆集(Rset)的概念,下面是ORACLE官方对于记忆集的解释The data structure for keeping

2021-06-02 14:43:24 259

原创 探究JVM(二)理解JDK 7 中的String.intern()

引言:String.intern() 被用来往字符串常量池中添加字符串,使得字符串的值可以复用,从而降低了内存开销。String.intern() 在JDK 7 中发生了重大变动,理解String.intern()改动后的原理能帮助我们正确使用它。

2021-05-30 15:55:50 340 3

原创 探究JVM(一)JDK 8 以后内存区域的变化

引言:熟悉Java内存自动分配的机制,就更能掌握垃圾回收器的设计和工作原理。在JDK 8 版本后,JVM内存区域发生了较大的改动。在JDK 8 之前采用永久代来实现方法区,但是永久代的内存分配受制于JVM虚拟机管理的内存区域,在运行时动态大量生成类的情况下,内存容易溢出,所以在JDK 8 以后采用元空间来实现方法区。

2021-05-30 11:08:18 774

空空如也

空空如也

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

TA关注的人

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