jvm|JVM底层原理之什么是逃逸分析( 二 )


public void test() {
\t\tUserInfo user = new UserInfo();
\t\tuser.id = 1;
\t\tuser.age = 18;
\t

经过标量替换:
public void test() {\t\tint id = 1;\t\tint age = 18;
\t

大概就是这么个意思 , 这样可以节省很多不必要的内存空间
参数:
-XX:+EliminateAllocations 开启标量替换(jdk1.8 默认开启)-XX:-EliminateAllocations 关闭就可以了

逃逸分析的缺陷逃逸分析在JDK1.6中不太成熟 , 主要是不能保证逃逸分析的性能收益必定高于它的消耗 。 如果要完全准确地判断一个对象是否会逃逸 , 需要进行一系列的复杂分析 , 但是这样会很消耗资源 , 如果分析完后没有什么收获 , 就相当于凭空浪费了很多资源 。 所以目前虚拟机采用的是不那么准确 , 但时间压力相对较小的算法来完成逃逸分析 。
除此以外还有一些其他的优化手段 , 只是方法内联和逃逸分析是比较出名而已 。