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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 全海波 中级黑马   /  2012-9-1 19:16  /  2248 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 全海波 于 2012-9-2 08:03 编辑

内存中有共有几片内存?什么是池?池又存在何处?

7 个回复

正序浏览
Java内存分配中的栈
在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。
当在一段代码块定义一个变量时,Java就在栈中 为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
Java内存分配中的堆
堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。

在堆中产生了一个数组或对象后,还可以 在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。
实际上,栈中的变量指向堆内存中的变量,这就是Java中的指针!
常量池 (constant pool)
常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。
包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用.
我们常说的字符串池就是常量池中的一部分
静态域
静态成员变量可以脱离对象而存在,是类本身的属性。所以对于任何对象来说,这个静态成员都是存在的,类似对象间的全局属性。

回复 使用道具 举报
楼主,想搞明白java内存分配的问题,如果你喜欢看书的话,我建议你看一下java虚拟机规范,网上很方便就可以找到java se 7的中文版,一定会很有帮助的,但是有点难度
回复 使用道具 举报
王金科 发表于 2012-9-1 19:32
基本数据类型 和 对象的引用
String str = new String();
str就是对象的引用

看错了!不好意思!
回复 使用道具 举报
全海波 发表于 2012-9-1 19:25
基本数据类型,何来引用?

基本数据类型 和 对象的引用
String str = new String();
str就是对象的引用
回复 使用道具 举报
全海波 发表于 2012-9-1 19:25
基本数据类型,何来引用?

哥们,你理解过了
回复 使用道具 举报
王金科 发表于 2012-9-1 19:22
寄存器:我们在程序中无法控制
栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在 ...

基本数据类型,何来引用?
回复 使用道具 举报
寄存器:我们在程序中无法控制
栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
堆:存放用new产生的数据
静态域:存放在对象中用static定义的静态成员
常量池:存放常量

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1

查看全部评分

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