答案: 不是 |
---|
问题背景: 老年代的GC耗时很长,还会有STW出现。 所以阻碍性能 |
思路: 把一部分对象别放在堆里,这样就减少了GC频率。 |
1. 堆外存储技术
1.1 逃逸分析
如果经过逃逸(escape analysis)分析,创建的新对象并没有逃逸出方法的话,那么就可以被优化成栈上分配内存,而无需堆上分配内存了,自然也就没有GC了。
注意: 对象定义在方法内部,没有在方法外被使用,则没有发生逃逸,是分配到栈上,随着方法执行结束,栈空间被移除而消亡。
配置方法:
-XX:+DoEscapeAnalysis 显示开启逃逸分析
-XX:+PrintEscapeAnalysis 查看逃逸分析结果
|
| —- |
|
1.2 GCIH
基于taobaoVM, GCIH(GC invisible heap), 将生命周期较长的Java对象从heap中移至heap外,不受GC管理,以此来达到降低GC频率和提升GC的回收效率。 |
2. 基于逃逸分析的代码优化
lect 83 84 85 EscapeAnalysis.javaScalarReplace.javaStackAllocation.javaSynchronizedTest.java |