问题:堆是分配对象存储的唯一选择吗?
答案是否定,但是由于逃逸分析技术的不成熟,所以也可以说这句话是正确的。
逃逸分析:在方法中被定义,只在方法内部进行使用,即为未逃逸。
快速分析new的对象实体是否发生逃逸分析:就看该对象在方法外是否能被调用
从jdk7开始,逃逸分析是默认开启的。
代码优化:
- 栈上分配
- 同步省略
- 分离对象或标量替换
栈上分配:
同步省略:
标量替换:标量替换简单来说就是将可以拆分的变量(如新定义的类),拆分为不可分解的量(标量),在java中,将其放入栈中进行存储。
逃逸分析是在服务器端才有的,在客户端是不存在逃逸分析的
逃逸分析小结:认为逃逸分析技术还是不成熟的
《堆》章节总结: