JVM与线程(线程在JVM中)

1、JVM什么时候启动?

        类被调用时启动,此时会启动JVM线程然后再是其他的线程(main)

2、JVM内存区域

除了程序计数器(PC)之外都有可能发生内存溢出
方法区:类信息、常量、static 、JIT 、(信息共享)(OOM)
Java堆区:实例对象、GC、(信息共享) (OOM)
VM stack:Java方法在运行的内存模型 (OOM)
PC:java线程的私有数据,这个数据就是执行下一条指令的地址
Native method stack: 与JVM的native(00M)
3、Java内存模型 Java memory model JMM(规范,抽象的模型)

1)主内存:共享的信息
2)工作内存:私有信息,基本数据类型,直接分配到工作内存,引用的地址存放在工作内存,引用的对象存放在堆中
3)工作方式:
A 线程修改私有数据,直接在工作空间修改
B 线程修改共享数据,把数据复制到工作空间中去,在工作空间中修改,修改完成以后,刷新内存中的数据
4、硬件内存架构与java内存模型

    1)硬件架构


a)CPU缓存的一致性问题:并发处理的不同步
b)解决方案:
i.总线加锁() 降低CPU的吞吐量
ii.缓存上的一致性协议(MESI)
当CPU在CACHE中操作数据时,如果该数据是共享变量,数据在CACHE读到寄存器中,进行新修改,并更新内存数据
CaCHE LINE置无效,其他的CPU就从内存中读数据

    2)Java线程与硬件处理器

    3)Java内存模型与硬件内存架构的关系

5、并发编程的三个重要特性
原子性:不可分割  x=1
可见性:线程只能操作自己工作空间中的数据
有序性:程序中的顺序不一定就是执行的顺序
编译重排序
指令重排序
6、JMM对三个特征的保证

    1)JMM与原子性

    A) X=10  写  原子性   如果是私有数据具有原子性,如果是共享数据没原子性(读写)
B) Y=x 没有原子性
a)把数据X读到工作空间(原子性)
b)把X的值写到Y(原子性)
C)I++ 没有原子性
a)读i到工作空间
b)+1;
c)刷新结果到内存
D) Z=z+1 没有原子性
a)读z到工作空间
b)+1;
c)刷新结果到内存
多个原子性的操作合并到一起没有原子性

保证方式:

    Synchronized

    JUC    Lock的lock锁

    2)JMM与可见性

    Volatile:在JMM模型上实现MESI协议
Synchronized:加锁
JUC Lock的lock锁

    3)JMM与有序性

     Volatile
Synchronized
Happens-before原则
1)程序次序原则
2)锁定原则 :后一次加锁必须等前一次解锁
3)Volatile原则:霸道原则
4)传递原则:A---B ---C A--C

最新文章

  1. Swift语言快速入门
  2. mac 下配置 VS Code 开发 Golang
  3. Log4j的ConversionPattern无缝适配到Logback
  4. Displaying Window In Center In Oracle Forms 6i
  5. 【转】表删除时 Cannot delete or update a parent row: a foreign key constraint fails 异常处理
  6. ruby4种比较符号
  7. C# 使用 AutoResetEvent 或 ManualResetEvent 同步两个线程
  8. action 关联
  9. Linux企业级项目实践之网络爬虫(15)——区分文本文件和二进制文件
  10. 安卓推送——个推服务端api使用误区
  11. nodejs学习第一天之模块
  12. JAVA设计模式---命令模式
  13. 【vue】vue +element 搭建项目,vuex中的store使用
  14. 关于EOF的使用的好文章
  15. html 之 <meta> 标签之http-equiv
  16. Python全栈开发-Day7-面向对象编程2
  17. CNN中的池化层的理解和实例
  18. 防止sql注入的几种方法
  19. workflow中的‘非典型’自动触发器trigger_model
  20. Duilib应用修改程序图标方法

热门文章

  1. 阿里巴巴高可用技术专家襄玲:压测环境的设计和搭建 PTS - 襄玲 云栖社区 今天
  2. CDH 安装的博客地址记录
  3. 使用select和show命令查看mysql数据库系统信息
  4. LeetCode_122. Best Time to Buy and Sell Stock II
  5. Delphi分割字符串函数Split源码
  6. js动态改变iframe的高度
  7. iOS-MJRefresh框架
  8. jenkins的maven插件
  9. js中遍历对象(5种)和遍历数组(6种)的方法总结(转载)
  10. 关于VS2010工程各种路径注意事项汇总