堆栈(stack):内存总是向一个方向增加或向相反方向减少,这个内存区用于存放方法或块中声明的局部变量。遇到局部变量声明时(包括调用方法中的变元变量-通C中的形参)内存增长,退出方法或块时这些变量弹出堆栈。
堆(heap):用于存储对象,对象的引用放在堆栈区,但是对象的数据区必须存放在堆中。堆是内存单元构成的一个巨大的表。New语句生成新对象时,保留的小块内存单元随时进行分配,一个内存单元块不再被现有变量引用时,这些不用的单元被释放和收集起来。理解起来费劲
堆内存存放的有:String、基本数据类型、对象引用、static静态代码块等
栈内存存放的有:StringBuffer、对象等。存放位置可以自定义吗,如果不能,那了解他有什么意义
栈是存放函数调用过程中的临时变量的! 堆是程序运行过程中动态申请的内存的存放处的!比如new的对象就在堆上
栈由寄存器直接操作,速度快;堆内可自由分配,内存量大,也可会放在虚拟内存当中,访问速度较慢。
堆内存是指存放的数据信息等“先进先出”,即取用先前存放的数据之后才能取用后面的,而栈内存恰好相反,即“先进后出”。上学的时候听老师讲过,不过java程序怎么看不出来什么先进先出
了解堆栈对程序开发又有什么帮助
上面是我从网上找的一些信息,有没有谁这方面比较了解的,期待李叶式的答案 |