JVM内存模型

来源:互联网 发布:风水织梦网站源码 编辑:程序博客网 时间:2024/06/05 10:34

    • jVM的启动流程
    • JVM的基本结构
    • 内存模型
      • 代码块
    • 小结

jVM的启动流程

先来说下JVM的启动流程
jvm启动流程

1) 创建JVM装载环境和配置
2) 装载JVM.dll
3) 初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例
4) 调用JNIEnv实例装载并处理class类。


JVM的基本结构

jvm基本结构

总体来说分为三部分
- 加载.class文件
- 执行垃圾收集


有了上图的基本了解后,再看看每个结构的工作内容有哪些。

其实每一个线程有一个工作内存和主存独立,他们的内存模型是什么样的

内存模型

内存模型

当数据从主内存复制到工作存储时,必须出现两个动作:第一,由主内存执行的读(read)操作;第二,由工作内存执行的相应的load操作;当数据从工作内存拷贝到主内存时,也出现两个操作:第一个,由工作内存执行的存储(store)操作;第二,由主内存执行的相应的写(write)操作。

对于普通变量,一个线程中更新的值,不能马上反应在其他变量中
如果需要在其他线程中立即可见,需要使用 volatile 关键字

代码块

代码块语法遵循标准markdown代码,例如:

public class VolatileStopThread extends Thread{private volatile boolean stop = false;public void stopMe(){stop=true;}public void run(){int i=0;while(!stop){    i++;             }    System.out.println("Stop thread");}public static void main(String args[]) throws InterruptedException{VolatileStopThread t=new VolatileStopThread();t.start();Thread.sleep(1000);t.stopMe();Thread.sleep(1000);}

没有volatile -server 运行 无法停止

小结

jvm内存模型中变量的可见性在工作中是常遇见的。若你没有注意到这点,那么难免就会中招。更新变量无效。这是不可忽视的一个问题。

原创粉丝点击