自定义博客皮肤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)
  • 收藏
  • 关注

原创 聊聊并发编程-java内存模型

上一节中讲了可见性,原子性和有序性问题产生的源头。这一节我们就来讲讲如何解决可见性,有序性问题。通过上节我们知道可见性是由于CPU缓存引起的,有序性是由于编译器重排优化引起的。那么解决可见性和有序性最简单的方案就是禁用CPU缓存和禁止指令重排。但是如果我们直接粗暴的禁止也就享受不了CPU缓存和指令重排带来的性能优化的成果了。最好的办法是能够提供禁止使用CPU缓存和指令重排的方法,由我...

2019-12-13 16:12:22 118

原创 聊聊并发编程-可见性,原子性和有序性

并发是提升性能的利器,同时也是最容易出bug的。编写正确的并发程序是一件比较困难的事情。并发程序的bug往往会很诡异,同时又难以重现,调试,让人抓狂。但如果我们能理解并发的本质,抽丝剥茧,并能快速,精准的找出产生问题的源头。接下来我们就来分析一下并发问题产生的源头。大家都知道CPU,内存,IO设备这三者的速度相差悬殊。我们的程序会有访问内存,IO。根据木桶原理程序的性能取决于...

2019-11-25 14:43:51 211

原创 从源码角度解析HashMap特性

HashMap实现了Map接口,主要用于存储键值对数据。它是java开发中高频使用的一个API,接下来我们就通过源码来分析它是如何工作的,以及具有哪些特性。首先来看看它是如何存储数据的,我们最常用的map.put(K,V)方法我们调用put方法的时候其实内部调用的是putVal方法,这里一个值得关注的地方是hash(key)这个方法。我们先来看看它做了什

2017-11-14 17:33:02 308

原创 从源码角度解析Vector特性

Vector它和lArrayList一样,实现了List接口。且它的底层数据存储也和ArrayList一样,用数组进行存储数据。所以这里就不在过多讲述Vector存储查询原理了。想要了解相关原理的童鞋,可以查看我前面ArrayList相关博客。在这里主要讲下Vector与ArrayList不同点。最大的不同点就是Vector是线程安全的,ArrayList不是线程安全的。这里讲下为什么Ve

2017-11-10 14:13:43 292

原创 从源码角度解析LinkedList特性

前两天讲到了ArrayList,那么按照套路今天应该到LinkedList了。那么我们现在就开始来扒开LinkedList的外衣,看看它的内在从名字上我们就能够知道LinkedList它的底层是通过链表来存储数据的,来看看它的源码。OK,没有毛病。我们来看看Node类,它是怎么存储的从上面可以看出Node保存当前节点内容,以及前后节点的引用,

2017-11-06 10:41:43 569

原创 从源码角度解析ArrayList特性

说到ArrayList想必大家都不陌生,这绝对是我们日常开发高频使用的一个类。今天我也在这说道说道下ArrayList。ArrayList是List的一个实现类,在我们的开发使用中主要用来存储对象。想必大家在面试的时候面试官经常会问List,Set,Map这三者的区别。有过工作经验的或者看过网上XXX面试宝典的人肯定都能信手拈来答上来。接下来我就来从源码的角度来说道说道ArrayList为

2017-11-03 10:06:15 1343

空空如也

空空如也

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

TA关注的人

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