- 博客(5)
- 收藏
- 关注
原创 java并发编程之volatile原理
java volatile内存语义java的volatile关键字比锁要轻量级,volatile保证了内存可见性。java语言规范中对volatile的要求是:一个线程对volatile变量的写,其他线程必须马上能看到,也就是说,对volatile变量的读能读到最新值。java是一门跨平台的语言,而各种处理器都提供了不同的内存模型,所以java提供了JMM屏蔽各种处理器内存模型的差异,让程序员在...
2019-04-17 17:21:52
180
原创 java并发编程之CPU缓存一致性和内存屏障
volatile内存语义在之前的文章 java并发编程之内存模型 中有对volatile的内存语义进行分析,这里简单的复习一下。volatile的内存语义如下:对volatile变量的写,对其他线程是可见的,其他线程立马就能读到写入的值。volatile变量的读写是具有原子性的。volatile的内存语义是如何得到保证的简单的来说,实现volatile是通过内存屏障(memory b...
2019-04-12 04:07:17
1492
2
原创 openjdk hotspot源码分析之string.intern方法原理
java实现引用的方式java实现引用有直接指针和句柄池2种方式,下面简单说下2种方式的区别和优缺点:1.直接指针的实现方式是把obj的内存地址或者相对偏移量直接赋值给Java变量,其优点是直接定位,访问快,但是缺点也很明显,Java是一门gc语言,当发生gc时,需要移动obj的偏移量,那么,对应的指针也需要发生移动,但是,由于直接指针实现的引用,指针是在Java的变量里的,移动是非常困难的...
2019-04-08 15:40:53
501
原创 jvm之jvm运行时数据区
由上图可知,jvm运行时数据区由堆、虚拟机栈(方法栈),本地方法栈,程序计数器,方法区(1.8之前由永久带实现,1.8之后由元空间来实现)5部分组成,其中,堆和方法区是所有线程共享的数据区,而虚拟机栈,本地方法栈,程序技术器是线程私有的数据区域Java堆堆是Java虚拟机管理的内存中最大的一块,Java堆是所有线程共享的内存区域,Java堆在Java虚拟机启动时创建。Java堆用来存放对象实...
2019-02-16 02:21:13
144
原创 Java并发编程之Java内存模型(JMM)
什么是Java内存模型什么是Java内存模型(Java Memory Model,JMM)呢?Java内存模型是Java虚拟机规范定义的一种模型,操作系统不是有自己的内存模型吗,为什么Java虚拟机规范还要在操作系统之上再封装一个Java内存模型呢?是这样的,每个操作系统的内存模型都存在一定的差异,像c/c++这类语言就是直接使用操作系统的内存模型,那么就会存在同一套代码,在这个平台运行是没有问...
2019-02-15 15:12:01
282
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人