b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

:java内存分配策略及堆和栈内存的比较

电脑杂谈  发布时间:2021-03-03 05:04:31  来源:网络整理

Java将内存分为两种,一种称为堆栈内存,另一种称为堆内存

在函数中定义的一些基本类型的变量和对象的引用变量分配在函数的堆栈存储器中。当在代码块中定义了变量时,java会在堆栈上为此变量分配内存空间。当超出变量的范围时,java将自动释放为该变量分配的内存空间,并且该内存空间可以立即用于其他目的。

堆内存用于存储new创建的对象和数组。堆中分配的内存由java虚拟机的自动垃圾收集器管理。在堆中生成数组或对象之后,您还可以在堆栈中定义一个特殊变量。该变量的值等于堆存储器中数组或对象的首地址,并且堆栈中的特殊变量变为:在数组或对象的引用变量之后,可以在堆栈存储器中使用引用变量。该程序访问堆中的数组或对象。参考变量等效于数组或对象的别名或代码名。

参考变量是普通变量。定义内存时将在堆栈上分配内存,并且在程序运行时将引用变量释放到范围之时,Java将自动释放为该变量分配的内存空间。此内存空间可立即用于其他目的。

堆内存用于存储由new创建的对象和数组。

在堆中分配的内存由Java虚拟机的自动垃圾收集器管理。

在堆中生成数组或对象之后,还可以在堆栈中定义一个特殊变量,以使该变量在堆栈中的值等于堆内存中的数组或对象的第一个地址,并且该变量在堆栈中,它成为数组或对象的引用变量。

栈内存和堆内存_jvm 堆内存与栈内存_jvm 堆和栈

引用变量等效于为数组或对象指定的名称。稍后,可以在程序中使用堆栈中的引用变量来访问堆中的数组或对象。

特别是:

堆栈和堆都是Java在Ram中存储数据的地方。与C ++不同,Java自动管理堆栈和堆,程序员无法直接设置堆栈或堆。

Java的堆是运行时数据区域,是类(从中分配空间的对象。这些对象是通过诸如new,newarray,anewarray和multianewarray之类的指令创建的。它们不需要程序代码即可显式释放。堆的优点是可以动态分配内存的大小,并且不需要事先告知编译器生命周期,因为它在运行时动态分配内存,并且Java垃圾收集器会自动删除这些不再使用的数据,但是缺点是由于运行时动态分配内存,访问速度很慢。

堆栈的优点是访问速度比堆快,仅次于寄存器,并且可以共享堆栈数据。但是缺点是必须确定存储在堆栈中的数据的大小和生存期,这缺乏灵活性。堆栈主要存储一些基本类型的变量(int,short,long,byte,float,double,boolean,char)和对象句柄。

堆栈的一个非常重要的特殊性是可以共享存储在堆栈中的数据。假设我们同时定义:

int a = 3;

int b = 3;

编译器首先处理int a = 3;首先,它在堆栈中创建对变量a的引用,然后查找堆栈中是否存在值3,如果找不到,则将其存储在3中,然后将a指向3。然后处理int b = 3 创建b的参考变量后,由于堆栈中已经存在3的值,因此b将直接指向3。这样,就会出现a和b同时指向3的情况。此时,如果a = 4,则为0。然后编译器将再次搜索以查看堆栈中是否有4值。如果没有值,它将在其中存储4并将a指向4;否则,将a指向4。如果已经存在,它将直接指向此地址。 。因此,a值的变化不会影响b的值。应该注意的是,这种数据共享不同于同时指向一个对象的两个对象引用的共享,因为在这种情况下,a的修改不会影响b,这是由编译器完成的,并且有利于节省空间。对象引用变量会修改该对象的内部状态,这会影响另一个对象引用变量


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-362684-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...