Java内存模型(JMM)
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读到寄存器中,进行新修改,并更新内存数据