编译器中的 逃逸分析
编译器 分析 逃逸
2023-09-14 09:07:22 时间
逃逸分析
在计算机语言编译器语言优化管理中,分析指针动态范围的方法称之为逃逸分析。
通俗点讲,当一个对象的指针被多个方法或线程引用时,我们称这个指针发生了逃逸。
public class G {
public static B b;
public void globalVariablePointerEscape(){//给全局变量赋值,发生逃逸
b=new B();
}
public B methodPointerEscape(){//方法返回值,发生逃逸
return new B();
}
public void instancePassPointerEscape(){
methodPointerEscape().printClassName(this);//实例引用发生逃逸
}
}
class B{
public void printClassName(G g){
System.out.println(g.getClass().getName());
}
}
在这个例子中,一共举了3种常见的指针逃逸场景。分别是 全局变量赋值,方法返回值,实例引用传递。
逃逸分析优化JVM原理
我们知道java对象是在堆里分配的,在调用栈中,只保存了对象的指针。
当对象不再使用后,需要依靠GC来遍历引用树并回收内存,如果对象数量较多,将给GC带来较大压力,也间接影响了应用的性能。减少临时对象在堆内分配的数量,无疑是最有效的优化方法。
怎么减少临时对象在堆内的分配数量呢?不可能不实例化对象吧&
相关文章
- pycharm的配置_pycharm添加编译器
- python解释器与编译器_pycharm python解释器
- [C语言]编译器 Visual Studio 安装教程
- C语言学习 第二章 安装编译器及运行环境
- CS143 编译器笔记
- 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )
- .Net 7 新编译器ILC简析(二)
- 腾讯深度学习编译器BlazerML项目技术分享
- c语言编译器1.2非常精简的手机编程APP
- Linux下极致编程体验:编译器之旅(linux下编译器)
- Linux下离线安装GCC编译器(linux离线安装gcc)
- Linux下C语言编译器的使用(linuxC编译器)
- 性能比较比较分析:VS编译器与Oracle数据库的性能差异(vs与oracle数据库)
- 简易指南:安装Linux上的GCC编译器(安装linuxgcc)
- 如何在Linux系统下使用C编译器?(linux下c编译器)
- Linux下快速安装g77编译器(linux安装g77)
- ☕【Java技术指南】「编译器专题」重塑认识Java编译器的执行过程(消除数组边界检查+公共子表达式)!
- C++编译器无法捕捉到的8种错误实例分析