JVM中类方法变量的存储方式



 JVM的启动流程



 JVM的基本结构,

每一个线程有一个pc寄存器。pc寄存器总是记录下一跳指令的地址。执行本地方法是pc的值为undefined。

方法区里存放的是哪些内容? 通常和 perm永久区关联
    方法区里存的都是类型信息,也就是类的信息,而类的信息又包括以下内容: 
     类的全限定名(类的全路径名) 
    类的直接超类的全限定名(如果这个类是Object,则它没有超类) 
    这个类是类型(类)还是接口 
     类的访问修饰符,如public、abstract、final等 
     所有的直接接口全限定名的有序列表(假如它实现了多个接口) 
    常量池 
     字段、方法信息、类变量信息(静态变量)    装载该类的装载器的引用(classLoader)、类型引用(class) 

方法区是什么?有哪些特点? 

     方法区是系统分配的一个内存逻辑区域,是用来存储类型信息的(类型信息可理解为类的描述信息)。方法区主要有以下几个特点: 
      一.方法区是线程安全的。由于所有的线程都共享方法区,所以,方法区里的数据访问必须被设计成线程安全的。例如,假如同时有两个线程都企图访问方法区中的同一个类,而这个类还没有被装入JVM,那么只允许一个线程去装载它,而其它线程必须等待 
     二.方法区的大小不必是固定的,JVM可根据应用需要动态调整。同时,方法区也不一定是连续的,方法区可以在一个堆(甚至是JVM自己的堆)中自由分配。 

     三.方法区也可被垃圾收集,当某个类不在被使用(不可触及)时,JVM将卸载这个类,进行垃圾收集  


 

java堆,可参考http://uule.iteye.com/blog/1894724



 栈:先进后出



 栈里面包含的内容,局部变量表和操作数栈。



 

 
 JVM中类方法变量的存储方式

volatile相关内容参考http://www.ibm.com/developerworks/cn/java/j-jtp06197.html


 线程内部的指令有可能被java虚拟机重拍,例如锕a=1;b=1;编译成java指令后,jvm判断前后两个语句没有前后顺序关联的话,jvm能对指令的先后顺序进行优化。但有些时候肯定不会优化。


 参考http://xtu-tja-163-com.iteye.com/blog/769992

猜你喜欢

转载自peng4602.iteye.com/blog/2366560