黑马程序员技术交流社区

标题: 堆内存存对象 那么方法区里面只存方法吗? [打印本页]

作者: 苏格拉底的弟子    时间: 2012-1-5 17:27
标题: 堆内存存对象 那么方法区里面只存方法吗?
本帖最后由 苏格拉底的弟子 于 2012-1-6 10:29 编辑

堆内存只存对象 那么方法区里面只存方法吗?里面还有哪些东西?
作者: 于海生    时间: 2012-1-5 17:38
Java内存分配与管理是Java的核心技术之一,一般Java在内存分配时会涉及到以下区域:

寄存器:我们在程序中无法控制
栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
堆:存放用new产生的数据
静态域:存放在对象中用static定义的静态成员
常量池:存放常量
非RAM存储:硬盘等永久存储空间

方法区:所有线程共享,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码。因为存储加载的class文件,所以常量池(class文件常量池和运行时常量池)也在这里,即常量池是方法区的一部分。
作者: 于海生    时间: 2012-1-5 17:38
Java内存分配与管理是Java的核心技术之一,一般Java在内存分配时会涉及到以下区域:

寄存器:我们在程序中无法控制
栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
堆:存放用new产生的数据
静态域:存放在对象中用static定义的静态成员
常量池:存放常量
非RAM存储:硬盘等永久存储空间

方法区:所有线程共享,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码。因为存储加载的class文件,所以常量池(class文件常量池和运行时常量池)也在这里,即常量池是方法区的一部分。
作者: 代臣    时间: 2012-1-5 18:47
方法区(也叫共享区、数据区):
类中的共享数据(被static修饰的数据、方法)、方法(没有被static修饰的方法)都存储在这里。
简单说方法区是所有方法(包括被静态修饰的方法)、被静态修饰的数据的存储区,他们都随着对象存储在方法区。
希望对你有用。
作者: chocolate    时间: 2012-1-5 18:53
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

偶奇偶偶ihi.jpg (47.83 KB, 下载次数: 140)

偶奇偶偶ihi.jpg

作者: 苏格拉底的弟子    时间: 2012-1-5 21:47
楼上的图好啊
作者: soh    时间: 2012-1-5 22:01
java运行的时候,用到哪个方法,才会把这个方法调入stack中。运行结束,这个方法就会从stack中移除。
作者: 李林轩    时间: 2012-1-5 22:09
每一个被加载的类型,在Java虚拟机中都会在方法区中保存如下信息:
          1)、类型的全名(The fully qualified name of the type)
          2)、类型的父类型的全名(除非没有父类型,或者弗雷形式java.lang.Object)(The fully qualified name of the typeís direct superclass)
          3)、给类型是一个类还是接口(class or an interface)(Whether or not the type is a class )
          4)、类型的修饰符(public,private,protected,static,final,volatile,transient等)(The typeís modifiers)
          5)、所有父接口全名的列表(An ordered list of the fully qualified names of any direct superinterfaces)
类型全名保存的数据结构由虚拟机实现者定义。除此之外,Java虚拟机还要为每个类型保存如下信息:
          1)、类型的常量池(The constant pool for the type)
          2)、类型字段的信息(Field information)
          3)、类型方法的信息(Method information)
          4)、所有的静态类变量(非常量)信息(All class (static) variables declared in the type, except constants)
          5)、一个指向类加载器的引用(A reference to class ClassLoader)
          6)、一个指向Class类的引用(A reference to class Class)


作者: 卢其龙    时间: 2012-1-5 22:47
  ◆寄存器:我们在程序中无法控制                                                                           ------我们控制不了,在视频没有讲过
  ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中      
  ◆堆:存放用new产生的数据
  ◆静态域:存放在对象中用static定义的静态成员
  ◆常量池:存放常量                                                                                              -------也给就是视频说的方法区
  ◆非RAM存储:硬盘等永久存储空间                                                                         ---------也给在视频应该也没有接触过




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