JVM运行时刻内存的分派详解
当前位置:以往代写 > JAVA 教程 >JVM运行时刻内存的分派详解
2019-06-14

JVM运行时刻内存的分派详解

JVM运行时刻内存的分派详解

在 java 垃圾接纳整理一文中,描写了jvm运行时刻内存的分派。个中有一个内存区域是jvm虚拟机栈,每一个线程运行时都有一个线程栈,

线程栈生存了线程运行时候变量值信息。当线程会见某一个工具时候值的时候,首先通过工具的引用找到对应在堆内存的变量的值,然后把堆内存

变量的详细值load到线程当地内存中,成立一个变量副本,之后线程就不再和工具在堆内存变量值有任何关系,而是直接修改副本变量的值,

在修改完之后的某一个时刻(线程退出之前),自动把线程变量副本的值回写到工具在堆中变量。这样在堆中的工具的值就发生变革了。下面一幅图

描写这写交互

JVM运行时刻内存的分配详解

ead and load 从主存复制变量到当前事情内存

use and assign  执行代码,改变共享变量值 

store and write 用事情内存数据刷新主存相关内容

个中use and assign 可以多次呈现

可是这一些操纵并不是原子性,也就是 在read load之后,假如主内存count变量产生修改之后,线程事情内存中的值由于已经加载,不会发生对应的变革,所以计较出来的功效会和预期纷歧样

对付volatile修饰的变量,jvm虚拟机只是担保从主内存加载到线程事情内存的值是最新的

譬喻如果线程1,线程2 在举办read,load 操纵中,发明主内存中count的值都是5,那么城市加载这个最新的值

在线程1堆count举办修改之后,会write到主内存中,主内存中的count变量就会变为6

线程2由于已经举办read,load操纵,在举办运算之后,也会更新主内存count的变量值为6

导致两个线程实时用volatile要害字修改之后,照旧会存在并发的环境。

    关键字:

在线提交作业