当前位置:首页 > 内存 > 正文

java堆内存和栈内存的区别

  • 内存
  • 2024-05-17 03:15:15
  • 6014

一、北大青鸟java培训:堆和栈的区别?

栈:编译过程中分配的内存空间是由操作系统(编译器)自动分配和释放的,栈空间是有限的。
在编译过程中,程序同时在栈上为变量和函数分配内存,执行函数调用的参数传递也在栈上进行。
堆:程序执行过程中动态分配的内存空间。
发行版通常由程序员分配。
内存分配函数,例如new和malloc,都是分配给堆的。
栈是机器系统提供的数据结构,堆是C/c++函数库提供的。
栈是系统提供的功能,特点是数据快速高效,但缺点有限,数据不灵活,被广泛使用,但效率可能会下降。
栈是一种系统数据结构,是进程/线程所特有的。
堆是函数库的内部数据结构,不一定是唯一的。
不同池分配的内存不能互相使用。
栈空间有两种类型:静态分配和动态分配。
静态分配是由编译器完成的,自动(自动)变量分配也是如此。
动态分配是通过alloca函数完成的。
动态堆栈分配不需要(自动)释放,也没有释放功能。
对于可移植程序,不鼓励动态堆栈分配。
堆空间分配是动态的,虽然在程序结束时,所有数据空间都会被释放回系统,但准确的申请内存/空闲内存匹配是一个好的应用程序的基本要素。
堆内存用于保存从新分配的内存中在堆上创建的对象和数组,并由虚拟机的自动垃圾收集器管理。
创建数组或堆对象是数组或对象的引用变量。它可用于通过引用程序后的变量来访问堆上的数组或对象。
引用变量是普通变量,定义时就在栈上分配,程序超出其作用域后,引用的变量就会被释放。
河北电脑培训