vrn*_*mar 4 java heap stack jvm
我读了一些有时JVM会识别某些对象并尝试在堆栈中创建它而不是堆的地方,因为堆栈上的内存分配比堆中的内存分配便宜,堆栈上的释放是免费的,堆栈是由堆栈高效管理的运行时.那么堆栈中的这个对象分配是如何工作的,有没有办法强制JVM这样做呢?
Smi*_*_61 8
无法强制JVM在任何地方分配对象.您不应该关心Java实际分配您的Object的位置,因为它没有在规范中定义.也就是说,JVM变得更加智能,并且使用一种称为转义分析的技术 ,如果它想要,它可以在堆栈上分配一个对象.但是,无法强制JVM在特定位置分配Object,并且规范不要求发生此行为.
apa*_*gin 6
如果谈论 HotSpot JVM,它永远不会在堆栈上分配 Java 对象。但是有一个优化:当 Escape Analysis 可以证明对象引用没有逃脱正在编译的范围时,JIT 完全消除了分配并将对象字段替换为局部变量。
注意:我们不能在堆栈上声明这是一个分配,因为对象不存在,例如调用对象的方法,例如hashCode或wait不可能。
hashCode
wait
每当 JVM 可以消除分配时,它就会自动消除。 如果它不能 - 没有办法强迫它。
归档时间:
11 年,9 月 前
查看次数:
540 次
最近记录: