自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小大虽差,各任其性,苟当其分,逍遥一也。

  • 博客(9)
  • 收藏
  • 关注

原创 java 内存模型入门系列教程-00

目录java 内存模型JSR 133-01java 内存模型数据结构-02java 内存模型缓存和重排序-03java 内存模型顺序一致性-04java 内存模型volatile关键字-05java 内存模型happens before,as-if-serial,synchronization-06java 内存模型 java 锁 ReentrantLock-07java 内存模型...

2018-12-12 21:08:43 18659

原创 java 内存模型 jmm 汇总-09

处理器内存模型顺序一致性内存模型是一个理论参考模型,JMM 和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM 和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序一致性模型来实现处理器和 JMM,那么很多的处理器和编译器优化都要被禁止,这对执行性能将会有很大的影响。分类根据对不同类型读/写操作组合的执行顺序的放松,可以把常见处理器的内存模型划分为下面...

2018-12-12 21:05:43 18079

原创 java 内存模型 final 关键字-08

基础知识基本用法修饰类当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。修饰方法使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率...

2018-12-12 21:04:44 18505

原创 java 内存模型 java 锁 ReentrantLock-07

锁的释放和获取锁是 java 并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。实例MonitorExample.javaclass MonitorExample { int a = 0; public synchronized void writer() { //1 a++; ...

2018-12-12 21:02:20 18184

原创 java 内存模型happens before,as-if-serial,synchronization-06

as-if-serial不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不会改变。编译器、runtime和处理器都必须遵守 as-if-serial 语义。为了遵守 as-if-serial 语义,编译器和处理器不会对存在数据依赖关系的操作做重排序,因为这种重排序会改变执行结果。但是,如果操作之间不存在数据依赖关系,这些操作就可能被编译器和处理器重排序。happe...

2018-12-12 21:01:04 18724 1

原创 java 内存模型volatile关键字-05

volatileJava语言规范第三版中对 volatile 的定义如下:java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了 volatile,在某些情况下比锁更加方便。如果一个字段被声明成 volatile,java线程内存模型确保所有线程看到这个变量的值是一致的。语义一旦一个共享变量(类的成员变量、...

2018-12-12 20:59:56 18142

原创 java 内存模型顺序一致性-04

数据竞争竞争当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下:在一个线程中写一个变量,在另一个线程读同一个变量,而且写和读没有通过同步来排序。当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序。保证JMM对正确同步的多线程程序的内存一致性做...

2018-12-12 20:58:51 18150

原创 java 内存模型缓存和重排序-03

缓存为了提升性能,JVM 做了 2 件事情。缓存+重排序为什么会出现线程可见性问题要想解释为什么会出现线程可见性问题,需要从计算机处理器结构谈起。我们都知道计算机运算任务需要CPU和内存相互配合共同完成,其中CPU负责逻辑计算,内存负责数据存储。CPU要与内存进行交互,如读取运算数据、存储运算结果等。由于内存和CPU的计算速度有几个数量级的差距,为了提高CPU的利用率,现代处理器结构...

2018-12-12 20:57:56 18421

原创 java 内存模型数据结构-02

内存模型Java内存模型,往往是指Java程序在运行时内存的模型,而Java代码是运行在Java虚拟机之上的,由Java虚拟机通过解释执行(解释器)或编译执行(即时编译器)来完成,故Java内存模型,也就是指Java虚拟机的运行时内存模型。运行时内存模型运行时内存模型,分为线程私有和共享数据区两大类,其中线程私有的数据区包含程序计数器、虚拟机栈、本地方法区,所有线程共享的数据区包含Java堆...

2018-12-12 20:56:33 18508

空空如也

空空如也

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

TA关注的人

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