答案: 不是
问题背景: 老年代的GC耗时很长,还会有STW出现。 所以阻碍性能
思路: 把一部分对象别放在堆里,这样就减少了GC频率。

1. 堆外存储技术

|

1.1 逃逸分析



如果经过逃逸(escape analysis)分析,创建的新对象并没有逃逸出方法的话,那么就可以被优化成栈上分配内存,而无需堆上分配内存了,自然也就没有GC了。

注意: 对象定义在方法内部,没有在方法外被使用,则没有发生逃逸,是分配到栈上,随着方法执行结束,栈空间被移除而消亡。


配置方法:
-XX:+DoEscapeAnalysis 显示开启逃逸分析
-XX:+PrintEscapeAnalysis 查看逃逸分析结果
image.png | | —- | |

1.2 GCIH



基于taobaoVM, GCIH(GC invisible heap), 将生命周期较长的Java对象从heap中移至heap外,不受GC管理,以此来达到降低GC频率和提升GC的回收效率。 |

2. 基于逃逸分析的代码优化

image.png
lect 83 84 85
EscapeAnalysis.javaScalarReplace.javaStackAllocation.javaSynchronizedTest.java