JVM内存模型

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

jVM的启动流程

先来说下JVM的启动流程
JVM内存模型_第1张图片

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


JVM的基本结构

JVM内存模型_第2张图片

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


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

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

内存模型

JVM内存模型_第3张图片

当数据从主内存复制到工作存储时,必须出现两个动作:第一,由主内存执行的读(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内存模型中变量的可见性在工作中是常遇见的。若你没有注意到这点,那么难免就会中招。更新变量无效。这是不可忽视的一个问题。

你可能感兴趣的:(【Java】,jvm,内存)