JAVA虚拟机体系结构
当java虚拟机运行一个程序时,它需要内存来存储许多东西,如,字节码,从已装载的class文件中得到的其他信息,程序创建的对象,传递给方法的参数,返回值,局部变量,以及运算的中间结果等等。java虚拟机把这些组织到几个“运行时数据区”。
1、方法区(当虚拟机运行java程序时,会查找在方法区中的类型信息)
由于所有线程都共享方法区,因此它们对方法区数据的访问是线程安全的,如两个线程同时访问里面的L这个类,只有一个线程区装载,另一个需等待。方法区的大小不必时固定的,虚拟机可以根据应用的需要动态调整。方法区也不必时连续的,方法区可以在一个堆(甚至是虚拟机自己的堆)中自由分配。方法区可以被垃圾收集。
方法区又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量
1)存储已被虚拟机加载的类信息(包括这个类型的全限定名,直接超类的全限定名,是类类型还是接口类型,访问修饰符(public,abstract),任何直接超接口的全限定名的有序列表。)
2)常量(常量池)、
----虚拟机必须为每个被转载的类型维护一个常量池。常量池就是该类型所用常量的一个有序集合,
包括直接常量(string,integer和floating point常量)和对其他类型、字段和方法的符号引用。
运行时常量池是方法区的一部分。
Class文件包括了类的版本,字段,方法,接口等描述信息以及常量池。
&n