黑马程序员技术交流社区

标题: 谁能帮忙做个总结啊,关于程序在内存中分布情况? [打印本页]

作者: 赵许星    时间: 2013-10-31 13:44
标题: 谁能帮忙做个总结啊,关于程序在内存中分布情况?
听毕老师说有三个区,栈、堆、工作区。
栈:临时变量
堆:new出的对象
工作区:class类原版、静态代码块、静态变量、函数
还有其他的情况吗??
作者: FFF    时间: 2013-10-31 14:54
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

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

其实,我们现在还不用那么深入的去研究这个问题。我们只要知道就可以了。这个是我们入门以后,高级Java程序员再来研究的问题。先把基础打好。
作者: 零下五度的水    时间: 2013-10-31 15:25
一个栈的数据只占一个格子
比如 int i = 1,他的数据 1 可以直接存放在栈中
而比如 Object obj = new Object();  他的数据 new Object() 占用不只一个格子,所以它只存放 new Object() 的地址,new Object()本身存放在堆中
一个堆数据占用一连串格子
比如 new Object() 这个实例,它要包括这个实例有几个变量几个方法,每个变量和方法有什么参数什么返回值等很多东西
堆和栈里的信息生命周期很短,是JVM垃圾处理的主要目标
比如 int i = 1,可能只有3行代码用了它,之后就彻底作废了
方法区里的信息生命周期很长,所以在JVM中单独放置在一个区域,垃圾处理极少扫描这一区域
作者: 帅气的冬瓜    时间: 2013-10-31 18:55
FFF 发表于 2013-10-31 14:54
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm ...

你这个总结太强大了!值得一看。




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