黑马程序员技术交流社区

标题: 内存分配问题 [打印本页]

作者: 乐宝myhoney    时间: 2014-2-4 19:46
标题: 内存分配问题
本帖最后由 乐宝myhoney 于 2014-2-5 00:21 编辑

内存分为哪几部分?各部分的特点是什么?烦请各位前辈予以解答,多谢了!
作者: Amorvos    时间: 2014-2-4 23:23
Java内存分配中的栈

在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。
  
Java内存分配中的堆

堆内存用来存放由new创建的对象和数组。

Java常量池

常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用。
作者: zhangchao    时间: 2014-2-4 23:48

java中的内存分配大致如下:
1. 寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制。
2. 栈内存:保存局部变量的值,对象的引用变量。
3. 堆内存:用来存放动态产生的数据,比如new出来的对象。注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因为同一个类的对象拥有各自的成员变量,存储在各自的堆中,但是他们共享该类的方法,并不是每创建一个对象就把成员方法复制一次。

4.常量池:JVM为每个已加载的类型维护一个常量池,常量池就是这个类型用到的常量的一个有序集合。包括直接常量(基本类型,String)和对其他类型、方法、符号引用。池中的数据和数组一样通过索引访问。由于常量池包含了一个类型所有的对其他类型、方法、字段的符号引用,所以常量池在Java的动态链接中起了核心作用。常量池存在于堆中
5.代码段:用于存放从硬盘读取的源代码
6.静态段:用于存放static成员,包括成员变量和成员方法。



作者: wq10zj    时间: 2014-2-7 15:50
逻辑上三个:
堆:new的对象 及属性值
栈:局部变量 用完就释放   
方法区:类方法 静态成员  其实就是类的结构 生命周期较长
作者: 张志明    时间: 2014-2-7 23:10
一般Java在内存分配时会涉及到以下区域:

寄存器:我们在程序中无法控制

栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中

堆:存放用new产生的数据

静态域:存放在对象中用static定义的静态成员

常量池:存放常量

非RAM存储:硬盘等永久存储空间
Java内存分配中的栈
当在一段代码块定义一个变量时,Java就在栈中 为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
Java内存分配中的堆

堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
常量池 (constant pool)

常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如:

◆类和接口的全限定名;

◆字段的名称和描述符;

◆方法和名称和描述符。







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