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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李晓峰 中级黑马   /  2013-5-16 23:59  /  1941 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘胜寒 于 2013-5-23 20:09 编辑

近期复习了java基础,感觉对内存分分配这块不太熟悉,谁能说明下各个内存区都分别存放什么?举例说明下其中数据、函数、构造函数等运行的先后顺序,最好涉及到继承等知识点?

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

6 个回复

倒序浏览
稍微说下,具体希望你看相关文章,这样更全面和透彻。一般java内存分配时涉及的区域有这么一些:寄存器,程序中无法控制(高级语言无法控制底层的原因);栈,存放基本类型的数据和对象的引用,注意对象本身不是放在栈中的;堆,用new创建的都在这里;静态域,存放对象中定义的静态成员;常量池,顾名思义当然是放常量的;非RAM存储,指硬盘这类永久性存储空间。

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
这个内容有点长。。我都忘了。。。
回复 使用道具 举报
内存:
栈:栈空间是系统分配的用于存放临时数据的地方,栈是一块有序排列的空间,其优点是读取速度快,缺点是究竟小(win32系统的栈空间是2M)
堆:堆空间是不连续的,由系统从物理内存与虚拟内存中提取,并拼装而成的,堆内存可以看做是金字塔,其结构有点像二叉堆(和二叉树差不多)堆内存很大,但速度相对栈来说要慢一些

除了以上两大内存区外,在编程专业用语里还有一些专用的内存分区。

对于举例我觉得没必要。我回答问题一般很少写代码,写也是简单的举例,因为我觉得代码是靠敲的,不是靠看的。编程要学的不是别人写个代码给你,而是告诉你编程的思想,想看别人的代码多了去了。java内置类库就够你看的。还要必要去让别人给你写一个?

理解对象的定义,理解构造函数是建立一个对象的必经过程,就像一个人出生之前必定要在母体10月怀胎一样。类看做是房子,那么构造函数就是打地基。没有地基房子盖不起来。构造函数是骨架,是初始化。
继承的概念就是我中有你。觉得不好理解就这么想,假如老虎继承了猫,那么你就想着老虎身体里就有一只猫。猫有的老虎都有,猫没有的老虎也可以有。
静态区(或叫全局变量区)一般用于存放固定的共享数据
常量区(文字常量区)用于存放固定的不可变量的数据,(并不是final修饰的)比如"abcdef"一个不可变量的字符串就在此区
代码区,用于存放函数体类定义等的二进制代码,此区不做运算,只是将数据转换后存放,由系统调用进栈后运算。
内存分配大概就这样,其中不一定都是java中的叫法,但所有计算机语法通用,无论是C# C++ java 都有这些分区,也有人叫静态常量区合称的



评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
楼主你好  如果问题已经解决  那么把帖子的类型改为“已解决”
回复 使用道具 举报
请高手帮忙举例说明下,或者推荐几篇相关文章。
回复 使用道具 举报
        内存的划分:
                                |--寄存器
                                |--本地方法区
                                |--方法区
                                        存储静态变量(类变量)和方法
                                |--栈内存
                                        存储的都是局部变量
                                |--堆内存
                注-->注-->        存储的是对象(数组也是Object对象)       
                                        |---堆里边的变量在创建的时候都会默认初始化
                                                boolean初始化为false
                                                int类型初始化为0
                                        |---堆内存中的对象使用过,        就会变成垃圾。
                                        JVM的垃圾回收机制会不定时启动,回收堆内存的垃圾
                                        |---数组角标越界,编译不会出错,运行出错。
                                                当引用没有任何实体指向时,会发生空指针异常。
               

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

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