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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马如龙 中级黑马   /  2014-6-17 01:57  /  1470 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

堆内存和栈内存一个用来存储对象一个用来存放局部变量
老师说要记住,我都整蒙圈了,有没有记忆的窍门,好的理解方式呢
求理解透彻的高手剖析下这易混的heap 和 stack 吧

既然都是内存他们之间有没有读取顺序
静态局部变量也存放在栈吗
静态代码块存放在哪呢

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

10 个回复

倒序浏览
哥们好像不存在所谓静态的局部变量吧?静态的变量和方法都是对象共享的。你试过在非静态方法里面定义静态方法和成员吗?
静态变量静态方法静态代码块都是存放在方法区的最先加载到内存。
回复 使用道具 举报
坐等大牛的回答
回复 使用道具 举报
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
3.静态区是一个独立的区域,和堆.栈并列的。在类加载的时候只运行一次。
========================================================

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
上楼已经解释很详细了
回复 使用道具 举报
我的理解是:堆内存中,用于存放存取的数据,这些数据不是通过程序直接调用,而是通过句柄调用,栈内存用于存放句柄,他是一个很小的标识型量,用于指向堆内存中的数据的位置。有什么不对的地方,请大家指正。
回复 使用道具 举报
java木 发表于 2014-6-17 03:28
哥们好像不存在所谓静态的局部变量吧?静态的变量和方法都是对象共享的。你试过在非静态方法里面定义静态方 ...

哦,仔细想了想还真不存在,这里有些混。富帅已经进去了吗
回复 使用道具 举报
没有呢?复习中,
回复 使用道具 举报
云的牧羊人 发表于 2014-6-17 10:36
我的理解是:堆内存中,用于存放存取的数据,这些数据不是通过程序直接调用,而是通过句柄调用,栈内存用于 ...

请问句柄是什么

点评

其实就是数据的引用变量,句柄应该 是C中的叫法,我习惯了。  发表于 2014-7-6 12:09
回复 使用道具 举报
Crystal静新 发表于 2014-6-17 10:20
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.j ...

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