黑马程序员技术交流社区

标题: 关于方法区 [打印本页]

作者: littlefoxtail    时间: 2013-6-3 11:54
标题: 关于方法区
本帖最后由 littlefoxtail 于 2013-6-3 18:26 编辑

方法,静态变量,常量池是不是都是存储在方法区里?调用的时候是通过引用指向方法区么

作者: 小冰块    时间: 2013-6-3 12:33
先解释一下内存中的三个区:
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

方法区存放装载的类数据信息包括:
    (1):基本信息:
           1)每个类的全限定名
           2)每个类的直接超类的全限定名(可约束类型转换)
           3)该类是类还是接口
           4)该类型的访问修饰符
           5)直接超接口的全限定名的有序列表
    (2):每个已装载类的详细信息:
           1)运行时常量池:
              存放该类型所用的一切常量(直接常量和对其它类型、字段、方法的符
            号引用),它们以数组形式通过索引被访问,是外部调用与类联系及类型对
            象化的桥梁。它是类文件(字节码)常量池的运行时表示。(还有一种静态常量池,在字节码文件中)。
           2)字段信息:
              类中声明的每一个字段的信息(名,类型,修饰符)。
           3)方法信息:
              类中声明的每一个方法的信息(名,返回类型,参数类型,修饰符,方
            法的字节码和异常表)。
           4)静态变量
           5)到类 classloader 的引用:即到该类的类装载器的引用。
           6)到类 class 的引用:  虚拟机为每一个被装载的类型创建一个 class 实例, 用来代表这个被装载的类





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2