JVM 内存模型图
方法区域存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class对象中的getName、isInterface等方法来获取信息时,这些数据都来源于方法区域,同时方法区域也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息。
Java 运行时数据区可以分成 方法区、 堆、 栈、 程序计数器、 本地方法栈
堆:Java 对象, 线程之间共享的
栈:方法运行,每一个方法对应一个栈帧,每一个线程对应一个栈,每个栈帧包括操作数、局部变量表、指向运行时常量池的引用,方法返回地址、附加位区,所以是线程不共享的。
方法区(静态区):被虚拟机加载的类信息、,常量静态(static)变量(final),即时编译器编译后的代码等数据。运行常量池是方法区的一部分,class文件除了有类的版本、字段、接口、方法等描述信息之外,还有一项信息常量池保存编译期生成的字面量和符号引用。 线程之间共享的
程序计数器:指出某一个时候执行某一个指令、执行完毕之后要返回的位置,当执行的Java方法的时候,这里保存的当前执行的地址,如果执行的是本地方法的时候,那么程序计数器为空。线程不共享。