在上面的代码里执行了 200 万次 fn 函数,创建了 200 万次 User 对象 。jdk8 里默认就开启了逃逸分析,通过 java -cp . -Xmx3G -Xmn2G - -XX:- Test 命令运行代码,这里特意使用 -XX:- 参数来关闭逃逸分析 。通过 jps 查看 java 进程的 PID,接着通过 jmap -histo [pid] 查看 java 堆上的对象分布情况,结果如下:
albon$ jmap -histo 50590num#instances#bytesclass name----------------------------------------------1:43364179744[I2:200000032000000User3:1764205872[C4:21965736[B5:48254960java.lang.Class6:135332472java.lang.String
可以看到堆里有个 User 对象 。
然后,再通过 java -cp . -Xmx3G -Xmn2G - Test 运行代码,结果如下:
albon$ jmap -histo 50603num#instances#bytesclass name----------------------------------------------1:43258962184[I2:3128315005296User3:1764205872[C4:21965736[B5:48254960java.lang.Class6:135332472java.lang.String
在堆里,我们只看到了 31 万个 User 对象 。由此可以验证,开启逃逸分析之后,只有 31 万左右的 User 对象在 Java 堆上分配,其余的对象已经通过标量替换优化了 。
- maven项目如何打包运行指定java程序(maven-shade
- 古埃及文明起源玛雅人眼中的地球第三次文明
- 比关羽忠义百倍:被世人遗忘的三国第一义士是谁?
- 盘点世界考古史上十大天迷,至今未解!
- 司马懿死前留下了这么个大问题,之后竟数百年没有解决
- 烛影斧声与宋太祖赵匡胤之死有着怎样的关系
- 有什么条件 2021征兵时间及要求
- 【题解】卫星照片
- 她被后人誉为倾世皇妃曾凭美貌惊艳两位帝王
- 诸弟之乱过程简介诸弟之乱最后的处理结果是什么