java堆和栈的介绍和区别

Posted sixp512720288

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java堆和栈的介绍和区别相关的知识,希望对你有一定的参考价值。

    Java 的堆(heap)是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
    栈(stack) zhan 的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。

     二者的区别:

 堆(Heap)栈(Stack)
存储内容对象实例(无论是成员变量,局部变量,还是类变量,它们指向的对象都存储在堆内存中)基本数据类型, 指令代码,常量,对象的引用地址
是否共享
异常错误java.lang.OutOfMemoryErrorjava.lang.StackOverFlowError
空间大小
存取速度快,仅次于CPU的寄存器

        注:1、栈内存属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。
                      而堆内存中的对象对所有线程可见,堆内存中的对象可以被所有线程访问;

                2、垃圾回收GC是针对堆Heap的,而栈因为本身是FILO - first in, last out. 先进后出,能够自动释放;

                3、栈的内存要远远小于堆内存,可以通过-Xss选项设置栈内存的大小。-Xms选项可以设置堆的开始时的大小,-Xmx选项可以设置堆的最大值。



以上是关于java堆和栈的介绍和区别的主要内容,如果未能解决你的问题,请参考以下文章

java中堆和栈的区别

java中堆和栈的区别!!!!

JVM堆和栈的区别

Java JVM里堆和栈的区别

Java中的堆和栈以及堆栈的区别

java中堆和栈的区别