当前位置:网站首页 > Java基础 > 正文

java编程基础理论



1.逃逸分析的定义

        逃逸分析:是一种可以有效减少Java 程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。

        方法逃逸:例如作为调用参数传递到其他方法中。

        线程逃逸:有可能被外部线程访问到,譬如赋值给类变量或可以在其他线程中访问的实例变量。

2.逃逸分析的理论基础

        经过逃逸分析之后,可以得到对象三种可能的逃逸状态
        GlobalEscape(全局逃逸): 即一个对象的引用逃出了方法或者线程。例如,一个对象的引用是复制给了一个类变量,或者存储在在一个已经逃逸的对象当中,或者这个对象的引用作为方法的返回值返回给了调用方法。

        ArgEscape(参数级逃逸):即在方法调用过程当中传递对象的应用给一个方法。这种状态可以通过分析被调方法的二进制代码确定。

        NoEscape(没有逃逸):一个可以进行标量替换的对象。该对象可以不被分配在传统的堆上。

        堆分配对象变成栈分配对象:一个方法当中的对象,对象的引用没有发生逃逸,那么这个方法可能会被分配在栈内存上而非常见的堆内存上。

        消除同步:线程同步的代价是相当高的,同步的后果是降低并发性和性能。逃逸分析可以判断出某个对象是否始终只被一个线程访问,如果只被一个线程访问,那么对该对象的同步操作就可以转化成没有同步保护的操作,这样就能大大提高并发程度和性能。

        矢量替代:逃逸分析方法如果发现对象的内存存储结构不需要连续进行的话,就可以将对象的部分甚至全部都保存在CPU寄存器内,这样能大大提高访问速度。

总结

  • 上一篇: 基础java的for
  • 下一篇: java语言基础技巧
  • 版权声明


    相关文章:

  • 基础java的for2024-11-13 15:10:02
  • java基础开发人员调度项目2024-11-13 15:10:02
  • java多线程之基础篇2024-11-13 15:10:02
  • 本科0基础真的建议学java吗2024-11-13 15:10:02
  • java中的基础类包2024-11-13 15:10:02
  • java语言基础技巧2024-11-13 15:10:02
  • java基础之异常处理机制2024-11-13 15:10:02
  • Java头歌数组基础选择题2024-11-13 15:10:02
  • java基础系列12024-11-13 15:10:02
  • java面试基础集合2024-11-13 15:10:02