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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马--马超 初级黑马   /  2012-8-5 10:17  /  1638 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  • 栈内存和堆内存有什么区别?(例如,他们里面数据的生命周期)
  • java为什么要划分栈和堆?
  • 栈和堆中所有可以存放的成员都是什么?
  • java垃圾回收器主要是针对栈还是堆内存的数据回收?
  • java中有几种池,都放在哪里,使用池的概念解决什么问题?


2 个回复

倒序浏览
http://bbs.itheima.com/forum.php?mod=viewthread&tid=8405
论坛好多堆和栈问题,建议楼主去找一下。
回复 使用道具 举报
1 栈区 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。比如说,java中的基本数据类型就存在于栈区,int。。。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限.
堆区亦称动态内存分配.程序在运行的时候new出来的对象,程序员自己负责在适当的时候释放内存。new出来得对象,动态内存的生存期可以由我们决定,如果我们不释放内存,java的自动回收机制将在最后才释放掉动态内存.但是,良好的编程习惯是:如果某动态内存不再使用,需要将其释放掉,否则,我们认为发生了内存泄漏现象
Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在堆栈中分配,也 就是说在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。


2 栈的优势是,存取速度比堆快,缺点是存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享。
堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,java垃圾回收器会自动收走这些不再使用的数据。缺点是,由于要在运行时动态分配内存,存取速度较慢。
理解这个对于为什么要分堆和栈就应该知道了吧。

3,A   a   =   new   A();中的new   A()是用来创建对象的,所创建的对象存在栈中;而a是引用,放在堆中,a中存放的是指向对象地址的值

4,垃圾收集算法的核心思想是:对虚拟机(jvm)可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被引用,则为垃圾对象,可以回收其占据的空间。

5,池的概念就是将某种资源缓存起来,不必要每次使用都初始化,使用完释放。使程序的效率得到提高。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马