逃逸分析

做个笔记,参开其他资料学习一下,以下纯属个人见解,如有错误之处,欢迎讨论和纠正。

参考资料

JVM的逃逸分析
深入分析JVM逃逸分析对性能的影响
对象并不一定都是在堆上分配内存的

在思考一个问题,在Java中,所有的对象都是分配在堆上吗?

jvm规范中,所有的对象都是分配上堆上面的。jvm规范是这么规定的,但是随着JIT编译技术的发展,具体的jvm实现存在一定的差异,会进行一定的优化。其中,就有通过“逃逸分析”技术,Java Hotspot编译器能够分析出一个新的对象的引用的使用范围从而决定是否要将这个对象分配到堆上。

在一些资料中,看到有这样的理解。

  1. 因为Java本身的限制(对象只能分配到堆中),为了减少临时对象在堆内分配的数量,在一个方法体内定义一个局部变量,并且该变量在方法执行过程中未发生逃逸,按照JVM调优机制,首先会在堆内存创建类的实例,然后将此对象的引用压入调用栈,继续执行,这是JVM优化前的方式。

  2. 采用逃逸分析对JVM进行优化。即针对栈的重新分配方式,首先找出未逃逸的变量,将该变量直接存到栈里,无需进入堆,分配完成后,继续调用栈内执行,最后线程执行结束,栈空间被回收,局部变量也被回收了。如此操作,是优化前在堆中,优化后在栈中,从而减少了堆中对象的分配和销毁,从而优化性能。

上面几篇都讲的挺好的,这里就不多说啦。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   我们都知道Java中的对象默认都是分配到堆上,在调用栈中,只保存了对象的指针。当对象不再使用后,需要依靠GC来...
    guoliang阅读 3,701评论 0 1
  • 前言:最近在H大的公众号学习了很多关于JVM相关的知识,本文为学习总结,参考于公众号:Hollis,原文标题如下:...
    Vechace阅读 5,139评论 1 8
  • 一、为什么“逃逸” 逃逸分析是指分析指针动态范围 的方法:同编译器优化原理的指针分析和外形分析相关联。当变量(或者...
    hedgehog1112阅读 4,320评论 1 1
  • 哈罗,自己!从今天起,好好读书学习,眼睛花了又怎样,眼镜会不离不弃。 哈罗,自己!从今天起,坚持锻炼身体,孩子将远...
    筠溪_w66f阅读 962评论 0 5
  • (李玟 黄志峰)他走路的时候,总是抬头、挺胸、直背,有一种不同的气质。“我现在还是把自己当成穿着便衣的军人。”今年...
    WYNNE玟大阅读 1,462评论 0 0