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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zgjswp 中级黑马   /  2015-3-10 01:26  /  1544 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在数据结构中学过栈,还知道一个叫做堆排序的。。为啥在java中新建对象就会用栈内存和堆内存画示意图?到底这两个是啥关系?难道就是为了便于理解抽象出来的概念?

15 个回复

倒序浏览
没啥,就是内存中两个不同的存储位置呗,不要想得太复杂
回复 使用道具 举报
简单地说:栈内存就是存储主函数main的成员的(成员变量只是储存实例化对象的索引地址值),而堆内存主要是存储类的栈内存索引所对应的实例化对象
回复 使用道具 举报
栈内存(stack)上分配的内存系统自动释放,堆内存(heap)上分配的内存,系统不释放,哪怕程序退出,那一块内存还是在那里。stack一般是静态分配内存,heap上一般是动态分配内存。
着的理解起来简单一点吧
回复 使用道具 举报
同求大神清晰透彻的分析
回复 使用道具 举报
java程序运行时,需要在内存中分配空间,为了提高运算效率,又对内存进行了不同区域的划分,因为每一片区域都有特定的数据处理方式和内存管理方式。
栈内存:用于存储局部变量,数据使用完,所占空间自动释放。
堆内存:数组和对象,通过new建立的实例都存放在堆内存中;
            每一个实体都有内存地址值;
            实体中的变量都有默认初始化值;
            实体不在被使用,会在不确定时间被垃圾回收机制回收。
在Java中建立对象,要给对象起名字,对象的名字作为局部变量被栈内存接收,通过new在堆内存中建立一个实体,就是对象,把对象的内存地址值赋给对象名。不知道有没有帮到你,我只知道这些,呵呵!一起加油!

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
 Java把内存划分成两种:一种是栈内存,一种是堆内存。

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

  当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。

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

  在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
内存地址:1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。
栈:存储的都是局部变量 ( 函数中定义的变量,函数上的参数,语句中的变量 );
        只要数据所在的区域结束,该数据就会被释放。
堆:用于存储数组和对象成员变量,也就是实体。就是用于封装多个数据的。
        1:每一个实体都有内存首地址值。
        2:堆内存中的变量都有默认初始化值。因为数据类型不同,值也不一样。
        3:垃圾回收机制。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 很给力!

查看全部评分

回复 使用道具 举报
艺多不压身丶 发表于 2015-3-10 15:04
内存地址:1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。
栈:存储的都是局部变量 ( 函数中定义的 ...

版主讲的好透彻
回复 使用道具 举报
学习了!
回复 使用道具 举报
栈内存是一个指向堆内存的地址,
堆内存是存储数据类型的~
回复 使用道具 举报
建议看看刘意老师的视频,讲的非常不错,其中就有堆栈内存分析.

评分

参与人数 1黑马币 +3 收起 理由
杨佳名 + 3

查看全部评分

回复 使用道具 举报
我发现我好像也分不清楚
回复 使用道具 举报
艺多不压身丶 发表于 2015-3-10 15:04
内存地址:1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。
栈:存储的都是局部变量 ( 函数中定义的 ...

版主回答的好详细,今天刚复习到这里
回复 使用道具 举报
艺多不压身丶 发表于 2015-3-10 15:04
内存地址:1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。
栈:存储的都是局部变量 ( 函数中定义的 ...

自己也找了资料看看再结合版主的讲解有些明白了,谢谢版主啊
回复 使用道具 举报
new 出来的都放到推内存中
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马