java 原语_Java原语是放在堆栈还是堆上?

在这两个地方都可以找到基元。

class Foo

{

public int x;

public static void Main()

{

int y = 3; // y is on the stack

Foo f = new Foo(); // f.x is probably on the heap

}

}

除非您不真正在乎,除非您正在构建JVM。 一个真正聪明的优化器可能会决定,由于f指向的Foo永远不会逃离Main,并且永远不会传递给另一个函数,因此可以安全地在堆栈上分配它。

关于更新:

堆栈和堆不是通过存储在其中的东西来区分的,而是通过为其提供的操作来区分的。 堆栈允许您以LIFO方式分配一块内存,直到所有比它还年轻的块都被释放为止,您才能取消分配一块。 这方便地与调用堆栈的使用方式保持一致。 您可以将任何东西放到堆栈上,只要可以在函数返回时将其清除即可。 这是一种优化,因为从堆栈中分配和取消分配非常快,因为它仅支持以这种方式使用。 如果愿意的话,可以在一个实现中将函数的所有局部变量存储在实现中。 堆更灵活,因此使用起来更昂贵。 就像我说的那样,说一个对象有一个堆栈和一个堆是不正确的,将堆栈与堆区分开的不是其中的内容,而是可用的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值