什么是Java的逃逸分析

JavaEscapeAnalysis是一种编译时技术,用于判断对象是否能分配到栈上,以减少内存占用和垃圾回收,提高程序执行效率。它分析代码以确定仅在单个方法内使用的对象,这些对象可以在栈上分配,避免在堆上分配带来的额外开销和同步锁的需求,尤其有利于高并发环境下的性能提升。

Java Escape Analysis 是在 Java 程序编译过程中使用的一个过程,用于确定哪些对象可以分配到栈上而不是堆上。

目的&作用:

  1. 它有助于通过减少运行时分配的内存量并因此减少垃圾回收量来提高程序的性能。

  1. 也有助于消除不必要的加锁&同步操作

具体来说,Java程序在编译时,编译器会做Escape Analysis,判断哪些对象可以分配到栈上,而不是堆上。

怎么做的呢?

这是通过检查程序代码,以确定哪些对象仅在单个方法中引用,于是可以在栈里面去分配来完成的。此过程称为“栈分配(stack allocation)”

为了确定可以在栈上分配哪些对象,编译器将分析程序代码,以查找在方法外部,是否有目标对象的引用。

如果没有的话,如下所示,将在栈上分配

如果一个目标对象在方法体之外被引用,那么它就不能在栈上分配,而必须在堆上分配。

这意味着在多个方法中引用的对象,或在方法外部引用的对象将不符合堆栈分配的条件,如下所示

综上所述,Java Escape Analysis 是在 Java 程序的编译过程中用来确定哪些对象可以分配到栈上而不是堆上的过程。 这有助于通过减少运行时分配的内存量和垃圾收集量来提高程序的性能。 同时。因为在栈而不是堆上分配对象,那么对象就是封闭在一个线程内,不与其他线程共享,从而在高并发的程序中消除了对象加解锁同步带来的性能消耗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值