JVM——堆栈(一)

初识JVM堆栈

  • 每个线程被创建时都拥有一个private的与C语言类似的栈,栈内保存着局部变量与部分结果,并在方法调用与返回时发挥作用。

  • Java虚拟机有一个堆,在所有Java虚拟机线程之间共享,堆是运行时的数据区域,为所有类实例和数组分配内存。堆在虚拟机启动时创建,对象的堆存储由垃圾收集器回收;对象永远不会显式地释放。Java虚拟机没有特定类型的垃圾收集器,可以根据实现者的系统需求选择存储管理技术。

  • 堆栈的内存不需要是连续的,这就允许Java虚拟机的大小固定,也可以根据计算的需要动态扩展与收缩,如果Java虚拟机堆栈的大小是固定的,那么堆栈的大小可以在创建时独立选择。

  • Java虚拟机实现可以为程序员或用户提供对Java虚拟机堆栈初始大小的控制,在动态扩展或收缩Java虚拟机堆栈的情况下,还可以提供对最大和最小大小的控制。

  • 以下异常情况与Java虚拟机栈关联: 如果在一个线程中计算需要比允许的更大的Java虚拟机堆栈,Java虚拟机 抛出一个StackOverflowError; 如果Java虚拟机栈可以动态地扩展,和扩张是未遂但可以可用内存不足影响 扩张,或者内存不足可以创建一个新线程的初始Java虚拟机栈,Java虚拟机抛出一个OutOfMemoryError

  • 下面是与堆相关的异常情况: 如果计算需要比自动存储管理系统提供的堆更多的堆,Java虚拟机将抛出OutOfMemoryError

猜你喜欢

转载自blog.csdn.net/xywxhzsjhh/article/details/115335205