java基础-内存分配

来源:互联网 发布:淘宝抢货神器 编辑:程序博客网 时间:2024/06/05 16:46

程序运行时,有六个地方可以保存数据:

(1)寄存器--最快的保存区域,在处理器内部,但寄存器数量有限,所有寄存器是根据需要由编译器分配。

(2)堆栈--驻留与常规RAM(随机访问存储器)中,堆栈指针下移,创建新内存;堆栈指针上移,释放内存。创建程序时,java编译器必须准确知道堆栈保存的所有数据的长度和存储时间,这是由于它必须生成相应的代码,以便上下移动指针。但这影响了程序灵活,所以对象并不放在这,但是这里放着java的一些数据和操作符,进栈出栈,尤为重要一点对象的句柄(特殊指针,或者说引用地址)保存在这。

存储的数据大致分为两类:

<1>java的基本数据类型共有8种,即int,short,long,byte,float,double,boolean,char(string不是基本类型)。基本类型的定义是通过诸如

int a = 2; long b = 233L;的形式来定义的,称为自动变量。处于追求速度的原因,它们存储在堆栈中。

<2>java中的引用对象

堆栈有一个很重要的特殊性,就是存在于堆栈中的数据可以共享


(3)---一种常规用途的内存池,其中保持了java对象,在内存堆或堆中编译器不需要知道堆里分配了多少内存空间和存储数据要在堆中停留的时间。因此,用堆保存数据会得到更大的灵活性。在创建一个对象时,只需用new命令编制相关代码即可。执行代码时,会在堆中自动进行数据保存,当然,为达到这种灵活性,在堆里分配存储空间会花掉更长的时间。



(4)静态存储---“静态”是指“位于固定位置”程序运行期间,静态存储的数据将随时等候调用,可以用关键字static关键字指出一个对象的特定元素是静态的,但java对象本身永远都不会置入静态存储空间

(5)常数存储---常数值通常直接置于程序代码内部。这样做是安全的,因为它们永远都不会改变。有的常数需要严格的保护,所有可考虑将它们置入可读存储器。

(6)非RAM存储---若数据完全独立于一个程序外,则程序不运行时仍可存在,并在程序的控制范围之外。

0 0
原创粉丝点击