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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵鸿富 中级黑马   /  2013-3-13 18:51  /  2145 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵鸿富 于 2013-3-14 15:50 编辑

为什么对象要通过NEW关键字才能出现在堆内存中?

点评

最起码的不能有通假字。。。。堆内存 栈内存  发表于 2013-3-13 20:13

5 个回复

倒序浏览
new 是实例化的过程 实例化需要耗费资源 因为Java是面向对象的 所以实例化的过程也就是创建对象 内存作为暂时处理数据的空间 因为擦写比较快 而内存分为5大区:栈内存,堆内存 ,方法区,地址池,寄存区。栈内存是按队列先进先出 所以一般存储成员变量 堆内存是先进后出 即存储引用变量 这样的处理机制可以加快电脑的性能。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油

查看全部评分

回复 使用道具 举报
先给你讲个笑话:面向对象编程,没对象编什么程,没对象就new一个啊!接下来仔细给你说说内存的事:
java虚拟机中内存的原型:有寄存器、栈、堆、静态域、常量池
寄存器:我们在程序中无法控制      栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中      
堆:存放用new产生的数据            静态域:存放在对象中用static定义的静态成员
java的虚拟机就是这么工作的,你要问为什么,我只能说因为1+1等于2.

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
Java程序在运行时,需要在内存中分配空间。为了提高运算效率,又对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
5片区域:栈内存,堆内存,方法区,本地方法区,寄存器。
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放
堆内存:数组和对象,通过new建立的实例都存放在堆内存中;
特点:1每一个实体(用来封装数据)都有内存地址值;2实体中的变量都有默认初始化值(int型0,double型0.0,float型0.0f,boolean型false);3(x=null)实体不再被使用,会在不确定的时间内被垃圾回收器回收。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 孙传磊 于 2013-3-13 20:01 编辑

这问题看是容易回答难,我按自己的理解说吧:

首先要明确什么是堆和栈:

简单的说堆和栈都是jvm在内存中开辟的空间,并赋予不同的功能。

接下来明确他们的作用,

栈的作用:栈中主要存放一些基本类型的变量(如int, short……)和对象句柄。存取速度比堆要快,栈数据    可以共享。这里的“对  象句柄”也可以说是 new 出来的对象名字或者叫它地址。

堆的作用:堆内存用来存放由new创建的对象和数组,一般占用的内存空间相对较大。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。简单的就是存放对象的具体内容。

这是后new的作用就突出啦:
new关键字的作用就是在堆内存中分配一块空间,将栈中的引用(叫它指针更形象,指针内存放的是地址)指向这在堆中开辟的空间,同时调用对象的构造方法。这就是使用new的原因吧。


评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
如果还有问题,请继续追问;若没问题了,请将帖子分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马