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

听毕老师说有三个区,栈、堆、工作区。
栈:临时变量
堆:new出的对象
工作区:class类原版、静态代码块、静态变量、函数
还有其他的情况吗??

3 个回复

倒序浏览
FFF 金牌黑马 2013-10-31 14:54:02
沙发
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

在Java虚拟机所管理的内存只包括:方法区,堆,栈,栈又分为本地方法栈,虚拟机栈。还有一个程序计数器等数据区域。就没有其他了。

其实,我们现在还不用那么深入的去研究这个问题。我们只要知道就可以了。这个是我们入门以后,高级Java程序员再来研究的问题。先把基础打好。

评分

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

查看全部评分

回复 使用道具 举报 1 0
一个栈的数据只占一个格子
比如 int i = 1,他的数据 1 可以直接存放在栈中
而比如 Object obj = new Object();  他的数据 new Object() 占用不只一个格子,所以它只存放 new Object() 的地址,new Object()本身存放在堆中
一个堆数据占用一连串格子
比如 new Object() 这个实例,它要包括这个实例有几个变量几个方法,每个变量和方法有什么参数什么返回值等很多东西
堆和栈里的信息生命周期很短,是JVM垃圾处理的主要目标
比如 int i = 1,可能只有3行代码用了它,之后就彻底作废了
方法区里的信息生命周期很长,所以在JVM中单独放置在一个区域,垃圾处理极少扫描这一区域

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
FFF 发表于 2013-10-31 14:54
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm ...

你这个总结太强大了!值得一看。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马