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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胥文 中级黑马   /  2013-1-29 21:10  /  1264 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-31 21:41 编辑

栈内存,堆内存,方法共享区是不是都在内存当中,只是在内存的不同区域啊
之前好像明白,但是一细想感觉又不是很明白
最好举例说明

3 个回复

倒序浏览
栈内存,堆内存,方法共享区他们都是内存区域,只是在内存中开辟的空间大小和地址值不同及实现的数据结构不同。
栈内存,的数据结构式先进后出的方式。
堆内存和方法共享区的数据结构我也不太明白,但是我想应该是任意存储的,因为在堆内存中new一个对象就开辟了一个空间,如果我连着new了三个对象,完成后,我又把第二个对象赋值null,垃圾收集器,清理后就剩下第一个和第三了了,所以说应该是随意存储。

纯属鄙人愚见,还望高人指点。
回复 使用道具 举报
本帖最后由 vmvm555 于 2013-1-29 22:09 编辑

l我也不是太懂啊你看这个吧
http://www.cnblogs.com/whgw/archive/2011/09/29/2194997.htm
讲的挺详细的
回复 使用道具 举报
本帖最后由 杨玲 于 2013-1-29 22:21 编辑

首先内存的分配有两种形式.一种是静态的分配,比如:类中的方法.静态变量得,它们都是在程序执行之前就要先加载到内在当中,
另一种是动态的分配内存,比如说StringBuilder这样的可变长度的数据结构,它们都是在程序的执行过程中在需要的时候才加载,
而所谓的堆栈其实它就是在每一个程序执行的时候系统分配给这个程序的一个固定大小的空间,而这个空间的大小取决于操作系统的调度算法.
在程序运行之前通常都需要编译一遍,在编译的时候其它就就会把那些需要的数据呀什么的先加载进来:
  1. import java.lang.*;//这句话其实会把lang包下的所有的.class文件加载到内存中.
复制代码
而对于函数也是一样的.比如:
  1. //对于这个函数它其实也是,在编译的时候就被加载到内存中去了,

  2. public void sop(Object obj)
  3. {
  4.    System.out.println(obj);
  5. }
  6. //而如果出现了重载或者是覆盖的时候也是会把这些方法全部加载到内在中,而在执行的时候根据上下文来判断具体要调用哪一个
复制代码
而它们具体是放在堆还是栈,这点本身不重要,因为它们都是用来存放程序执行所需要的数据的,

当然了,这只是我的理解,如果有不对的地方还请指正!

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 鼓励个

查看全部评分

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