叉烧店并不卖叉烧

java存储区域

java TTT 108℃ 0评论

优势:存取速度比堆快,仅次于直接位于CPU的寄存器。缺点:存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外栈数据可以共享

栈有一个很重要的特殊性,就是存在栈中的数据可以共享,假设我们同时定义:

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与b的值后,再令a=4;时,他就会重新搜索栈中是否有4的字面值,如果没有,重新开辟地址存放4的值;如果已经有了,则直接将a指向这个地址,因此a值得改变不会影响到b的值

另一种时包装数据类,如Integer,String,Double等将相应的基本数据类型包装起来的类。这些类数据全部存在堆中,Java用new()语句来显示地告诉编译器,在运行时才根据需要动态创建,因此比较灵活,但缺点是占用更多地时间。

statck。实际上是只有一个出入口的队列,即后进先出(First In Last Out),先分配的内存必定后释放。一般由系统自动分配,存放函数的参数值,局部变量等,自动清除

优势:可以动态分配内存大小,生存期也不必告诉编译器,Java的垃圾收集器会自动收走这些不使用的数据。但是缺点是,由于要在运行时动态分配内存,存取速度较慢

堆是heap,是所谓的动态内存,其中的内存在不需要时可以回收,以分配给新的内存请求,其内存中的数据是无序的,即先分配的和随后分配的内存并没有什么必然的位置关系,释放时也可以没有先后顺序。一般由使用者自由分配,malloc分配的就是堆,需要手动释放

寄存器

寄存器。这是最快的存储区,因为他位于不同其他存储区的地方——处理器内部。但是寄存器的数量机器有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器的存在

静态存储

这里的“静态”是指“在固定的位置”。静态存储里面存放程序运行时一直存在的数据。你可以用关键字static来表示一个对象的特定元素是静态的。注意Java独享本省从来不会存放在静态存储空间里

常量存储

常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。有时,在嵌入式系统中,常量本身回合其他部分分割离开,所以在这种情况下,可以选择将其放在ROM中

转载请注明:叉烧店 » java存储区域

喜欢 (0)
发表我的评论
取消评论

CAPTCHA Image
Reload Image
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址