jvm学习(1)——内存模型

jvm 基本结构

1,PC寄存器

每个线程拥有一个PC寄存器

在线程创建时 创建

指向下一条指令的地址

执行本地方法时,PC的值为undefined

2.方法区

保存装载的类信息

     •类型的常量池

     •字段,方法信息

     •方法字节码

通常和永久区(Perm)关联在一起

3.Java堆

和程序开发密切相关

应用系统对象都保存在Java堆中

所有线程共享Java

对分代GC来说,堆也是分代的

GC的主要工作区间

4.Java栈

线程私有

栈由一系列帧组成(因此Java栈也叫做帧栈)

帧保存一个方法的局部变量、操作数栈、常量池指针

每一次方法调用创建一个帧,并压栈


二 栈、堆、方法区交互


三.多线程运行的内存结构

内存模型

每一个线程有一个工作内存和主存独立

工作内存存放主存中变量的值的拷贝

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);
}

上述程序如果没有 private volatile boolean stop = false; 中的volatile关键字,在主函数中改变的值不会被别的线程看见,即VolatileStopThread线程不会停止

线程间可见性

含义:一个线程修改了变量,其他线程可以立即知道

保证可见性的方法

volatile

synchronized unlock之前,写变量值回主存)

final(一旦初始化完成,其他线程就可见)

猜你喜欢

转载自blog.csdn.net/weixin_42446078/article/details/81240240