JVM-020-运行时数据区-堆(Heap)-逃逸分析-代码优化
介绍
使用逃逸分析,编译器可以对代码做如下优化:
- 栈上分配:将堆分配转化为栈分配。如果一个对象在子程序中被分配,要使指向该对象的指针永远不会发生逃逸,对象可能是栈上分配的候选,而不是堆上分配
- 同步省略:如果一个对象被发现只有一个线程被访问到,那么对于这个对象的操作可以不考虑同步。
- 分离对象或标量替换:有的对象可能不需要作为一个连续的内存结构存在也可以被访问到,那么对象的部分(或全部)可以不存储在内存,而是存储在CPU寄存器中。
JVM-020-运行时数据区-堆(Heap)-逃逸分析-代码优化
使用逃逸分析,编译器可以对代码做如下优化:
JVM-019-运行时数据区-堆(Heap)-逃逸分析(Escape Analysis)
堆是分配对象的唯一选择么?
在《深入理解Java虚拟机》中关于Java堆内存有这样一段描述:
此外,基于OpenJDK深度定制的TaoBao VM,其中创新的GCIH(GC invisible heap)技术实现off-heap,将生命周期较长的Java对象从heap中移至heap外,并且GC不能管理GCIH内部的Java对象,以此达到降低GC的回收频率和提升GC的回收效率的目的。