黑马程序员技术交流社区

标题: 堆内存和栈内存问题 [打印本页]

作者: 马如龙    时间: 2014-6-17 01:57
标题: 堆内存和栈内存问题
堆内存和栈内存一个用来存储对象一个用来存放局部变量
老师说要记住,我都整蒙圈了,有没有记忆的窍门,好的理解方式呢
求理解透彻的高手剖析下这易混的heap 和 stack 吧

既然都是内存他们之间有没有读取顺序
静态局部变量也存放在栈吗
静态代码块存放在哪呢
作者: java木    时间: 2014-6-17 03:28
哥们好像不存在所谓静态的局部变量吧?静态的变量和方法都是对象共享的。你试过在非静态方法里面定义静态方法和成员吗?
静态变量静态方法静态代码块都是存放在方法区的最先加载到内存。
作者: 不去会死    时间: 2014-6-17 06:53
坐等大牛的回答
作者: Crystal静新    时间: 2014-6-17 10:20
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
3.静态区是一个独立的区域,和堆.栈并列的。在类加载的时候只运行一次。
========================================================
作者: axuan    时间: 2014-6-17 10:30
上楼已经解释很详细了
作者: 云的牧羊人    时间: 2014-6-17 10:36
我的理解是:堆内存中,用于存放存取的数据,这些数据不是通过程序直接调用,而是通过句柄调用,栈内存用于存放句柄,他是一个很小的标识型量,用于指向堆内存中的数据的位置。有什么不对的地方,请大家指正。
作者: 马如龙    时间: 2014-6-17 14:05
java木 发表于 2014-6-17 03:28
哥们好像不存在所谓静态的局部变量吧?静态的变量和方法都是对象共享的。你试过在非静态方法里面定义静态方 ...

哦,仔细想了想还真不存在,这里有些混。富帅已经进去了吗
作者: java木    时间: 2014-6-17 22:20
没有呢?复习中,
作者: 马如龙    时间: 2014-7-5 21:00
云的牧羊人 发表于 2014-6-17 10:36
我的理解是:堆内存中,用于存放存取的数据,这些数据不是通过程序直接调用,而是通过句柄调用,栈内存用于 ...

请问句柄是什么
作者: 玉遥    时间: 2014-7-5 23:41
Crystal静新 发表于 2014-6-17 10:20
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.j ...

说的挺好的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2