JVM

1, PC寄存器

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

      在线程创建时创建

      指向下一条指令的地址

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

2,方法区

     保存装载的类信息

            类型的常量池

            字段,方法信息

    方法字节码

      通常和永久区关联在一起

*    JDK 6时,String 等常量信息置于方法区,JDK7时,已经移到了 堆

3,JAVA堆

     和程序开发密切相关

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

      所有线程共享JAVA堆

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

     GC 的主要工作区间

  

      |————————————————-  |

      |    eden  | s0   |  s1 |  tenured      |

      |___________________________|

4,   JAVA 栈

     线程私有的

     栈由一系列帧组成(JAVA 栈也叫帧栈)

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

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

 

 

局部变量在栈上分配,栈上分配不可能出现内存泄漏

java 中的栈上分配

              

 

逃逸指的是   栈是线程私有的, 是否能被其他的线程引用

 

 

Java 的内存模型

    

 

 

可见性

 

重排序

 

 

指令重排

 

posted @ 2016-05-04 07:45  wind90  阅读(145)  评论(0编辑  收藏  举报