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(一旦初始化完成,其他線程就可見)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章