JVM内存模型,GC机制和原理

JVM 内存模型

Java虚拟机试图定义一种Java内存模型来屏蔽掉各层硬件和操作系统的差异访问。

内存模型有什么特性?

Java 内存模型规定了所有的变量都存储在主内存(Main Menory)中,每条线程还有自己的工作内存(work Memory)中。线程的工作内存中保存了该线程从主内存中拷贝的副本, 线程对变量的所有操作(读取,赋值)都必须在主存中进行,不能直接读取主存中的变量

happen before 原则

如果一个操作的执行结果需要对另外一个操作可见,那么这两个操作需要存在happen-before原则。

程序顺序规则:一个线程中的每个操happen-before该线程中的后续操作

监视器锁规则:对一个锁的解锁,happen-before于随后对这个锁的加锁

volatile变量规则:对一个volatile变量的写操作happen-before于任意的对这个volatile的读

传递性: A happen-before B ,B happen-before C ,那么A happen-before C

内存屏障

在每个volatile写操作的前面插入一个StoreStore屏障

在每个volatile写操作的后面插入一个StoreLoad屏障

在每个volatile读操作的后面插入一个LoadLoad屏障

在每个volatile读操作的后面插入一个LoadStore屏障

读写操作

volatile原理:happen before相关推荐

  1. volatile原理与技巧

    转自http://www.iteye.com/topic/109150 volatile, 用更低的代价替代同步 为什么 使用volatile比同步代价更低?  同步的代价, 主要由其覆盖范围决定, ...

  2. 24.volatile关键字的作用、volatile原理、可见性、内存屏障、volatile性能、transient

    24.volatile关键字的作用 24.1.volatile原理 24.2.可见性 24.3.内存屏障 24.4.volatile性能 25.transient 24.volatile关键字的作用 ...

  3. java volatile原理A CUP层面

    作者:知乎用户 链接:https://www.zhihu.com/question/49656589/answer/117826278 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  4. 浅析volatile原理及其使用

    前言 经常在网上看一些大牛们的博客,从中收获到一些东西的同时会产生一种崇拜感,从而萌发了自己写写博客的念头.然而已经有这个念头很久,却始终不敢下手开始写.今天算是迈出了人生的一大步^_^! volat ...

  5. 死磕Java并发:深入分析volatile的实现原理

    本文转载自公众号: Java技术驿站 通过前面一章,我们了解到synchronized是一个重量级的锁,虽然JVM对它做了很多优化. 而下面介绍的volatile则是轻量级的synchronized. ...

  6. Java volatile关键字原理解剖

    Java volatile关键字原理解剖 文章目录 Java volatile关键字原理解剖 参考文章 前置知识 CPU缓存模型 CPU缓存行 并发编程基本概念 Java锁概念 volatile关键字 ...

  7. Java并发编程,3分分钟深入分析volatile的实现原理

    volatile原理 volatile简介 Java内存模型告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理. 线程在工作内存进行操作后何时会写到 ...

  8. volatile与synchronized 同步原理基础讲解

    基本知识: 可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉.通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情.为了确保多个线程之间对 ...

  9. Java 并发编程CAS、volatile、synchronized原理详解

    CAS(CompareAndSwap) 什么是CAS? 在Java中调用的是Unsafe的如下方法来CAS修改对象int属性的值(借助C来调用CPU底层指令实现的): /*** * @param o ...

  10. 并发之volatile底层原理

    15.深入分析Volatile的实现原理 14.java多线程编程底层原理剖析以及volatile原理 13.Java中Volatile底层原理与应用 12.Java多线程-java.util.con ...

最新文章

  1. 日期类对象与整数之间的加法运算
  2. inventor应用程序错误---解决方法
  3. mysql主键更新被锁_MySQL 的加锁处理,你都了解的一清二楚了吗?
  4. python编程加油_编程学习资料,中途加油站,c++/java/python/小程序/人工智能......等等等等...
  5. struts2线程安全
  6. MVVM下listbox默认显示最后一行
  7. 经过实践的小企业的生存之道
  8. php接收ajax的表单数据,怎样用Ajax提交表单并接收其中的json数据
  9. pdms二次开发入门 c#语言
  10. 揭露淘宝不良商家,利用UI设计缺陷进行恶意修改销量以及评价!
  11. 如何在网页title前面加logo
  12. react-router v6替换history.goBack()和goForward()
  13. 线性最小二乘法拟合 matlab程序,曲线拟合的线性最小二乘法及其MATLAB程序
  14. office2016每次弹激活_win10系统office2016激活后仍弹出激活怎么解决
  15. 如何通过python判断闰年?
  16. u盘安装红旗linux操作系统,制作红旗8的系统安装u盘的方法
  17. java技术:输入拼音自动提示汉字的方法
  18. GBase 8a事务控制
  19. 中国电信云计算及SDx联合技术开发实验室执行主任王峰:中国电信SDN/NFV实践-从边缘到核心...
  20. 红橙Darren视频笔记 换肤框架4 换肤的功能完善 内存泄漏分析

热门文章

  1. 中考计算机上机考试如何操作,全国2021年初中信息技术中招考试上机考试提分技巧...
  2. 武装突袭3多人服务器文件地图,武装突袭3地图文件夹 | 手游网游页游攻略大全...
  3. java扫雷初级代码_运行在Eclipse环境下的java扫雷游戏的初级代码是什么?
  4. 车牌号测试打分最准确的软件,车牌号码吉凶测试
  5. 2048总结 python_2048游戏的python实现
  6. 应用程序无法正常启动0xc000007b win7
  7. 宏源股指期货期权早评:暂未脱离震荡
  8. codeforces 607B Zuma 区间dp
  9. 【排序算法】基数排序:LSD 与 MSD
  10. 【直线检测】基于LSD实现直线检测含Matlab源码