栈:用来存储局部变量、形参、方法的返回值、中间的运算结果。
特点:a、先进后出(后进先出)
    b、自动弹栈
堆:用来存储成员变量(属性)、数组的对象、方法的引用。
特点:a、由双链表实现的
    b、用户不能直接访问
    c、堆区的数据不能自动回收
队列:是一种先进先出的线性表。

解决方案 »

  1.   

    栈存储的是局部变量,先进后出,变量所属的作用域一旦结束,该变量就自动释放;堆内存存储的是数组和对象,或者说凡是new建立出来的都存放在堆中。
      

  2.   

    自己以前收录的面试宝典中的两题。。
    heap和stack有什么区别。 
    java的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。
    堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用new创建的对象都放在堆里,所以,它不会随方法的结束而消失。方法中的局部变量使用final修饰后,放在堆中,而不是栈中。
    说出ArrayList,Vector, LinkedList的存储性能和特性 ?
    ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
    LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。
      

  3.   

    将 jvm内存划分为  堆  和  栈 是最简单的一种理解方式,其实jvm内存划分复杂的多
    jvm   内存 主要包括 
    程序计数器(线程私有)  程序执行指令(比如当前正在执行某条语句,程序计数器会告诉jvm下一条语句是什么)
    jvm 栈 (线程私有)  存放方法中的局部变量等
    本地 方法 栈(线程私有) java调用 非java方法时开辟的一块空间
    堆内存 (线程共享) new出来的对象都存在在这块内存空间
    方法区(线程共享) 存放常量,字面量,类的信息,class文件信息 ,加载器信息等等只能简单的介绍一下了,如果要更深入的了解的话,就找找jvm内存相关的资料吧
      

  4.   

    要么多看看数据结构,要么多用用arraylist等容器