Java基础的知识点有哪些 该怎么去区分堆和栈

  Java基础的知识点有哪些?该怎么去区分堆和栈?做为应用最普遍的编程语言,Java吸引了大量的人学习。内存是Java中的重要概念,而栈和堆又是内存中的两个重要部分,所以零基础学Java时,必定会接触到堆和栈。那么该如何区别堆和栈呢?java

47a21a58b69d54dd44e4ec3630f607f1.jpg

  从优点及不足进行分析编程

  堆的优点是能够动态地分配内存大小,生存期也没必要事先告诉编译器,Java的垃圾收集器会自动收走这些再也不使用的数据。缺点是因为要在运行时动态分配内存,存取速度较慢。数组

  栈的优点是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。缺点是存在栈中的数据大小与生存期必须是肯定的,缺少灵活性。另外,栈数据能够共享。编程语言

  从存储对象和归属分析ide

  堆能够理解为内存中一片分散的区域,堆内存用来存储Java中的对象。不管是成员变量,局部变量,仍是类变量,它们指向的对象都存储在堆内存中。堆内存中的对象对全部线程可见,堆内存中的对象能够被全部线程访问。学习

  栈能够理解为内存中一片连续的区域。栈内存归属于单个线程,每一个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存能够理解成线程的私有内存。spa

  从异常错误和空间大小分析线程

  想要进一步理解堆和栈的关系,咱们须要了解JVM和垃圾回收机制。一般来讲,new建立的实例化对象及数组,是存放在堆内存中的,用完以后靠垃圾回收机制不按期自动消除。基本数据类型、局部变量都是存放在栈内存中的,用完就消失。orm

  若是是堆内存没有可用的空间存储生成的对象,JVM会抛出java.lang.OutOfMemoryError。若是栈内存没有可用的空间存储方法调用和局部变量,JVM会抛出java.lang.StackOverFlowError。栈的内存要远远小于堆内存,若是你使用递归的话,那么你的栈很快就会充满。若是递归没有及时跳出,极可能发生StackOverFlowError问题。对象

  综合来看,堆和栈都是内存中的一部分,有着不一样的做用,并且一个程序须要在这片区域上分配内存。若是你想成为一个好的Java工程师,必定要熟练掌握并明确区分堆与栈。

相关文章
相关标签/搜索