A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乐宝myhoney 中级黑马   /  2014-2-4 19:46  /  1141 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 乐宝myhoney 于 2014-2-5 00:21 编辑

内存分为哪几部分?各部分的特点是什么?烦请各位前辈予以解答,多谢了!

7 个回复

倒序浏览
Java内存分配中的栈

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

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

Java常量池

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

点评

谢谢!  发表于 2014-2-5 00:13

评分

参与人数 1技术分 +1 收起 理由
黄晓东 + 1

查看全部评分

回复 使用道具 举报

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

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


点评

客气了,互相学习,共同进步  发表于 2014-2-5 12:42
谢谢你的回答!  发表于 2014-2-5 00:12

评分

参与人数 1技术分 +1 收起 理由
黄晓东 + 1

查看全部评分

回复 使用道具 举报 1 0
逻辑上三个:
堆:new的对象 及属性值
栈:局部变量 用完就释放   
方法区:类方法 静态成员  其实就是类的结构 生命周期较长

评分

参与人数 1技术分 +1 收起 理由
黄晓东 + 1

查看全部评分

回复 使用道具 举报
一般Java在内存分配时会涉及到以下区域:

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

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

堆:存放用new产生的数据

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

常量池:存放常量

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

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

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

◆类和接口的全限定名;

◆字段的名称和描述符;

◆方法和名称和描述符。


评分

参与人数 1技术分 +1 收起 理由
黄晓东 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马