逃逸分析(Escape Analysis) 和 标量替换(Scalar Replacement) 是现代编译器(特别是 Java 虚拟机 HotSpot 的 JIT 编译器)中用于优化程序性能、减少内存分配和垃圾回收(GC)压力的两项核心技术。 它们通常是配合使用的:逃逸分析是前提,标量替换是基于这个前提做出的优化手段之一。 下面为您通俗且详细地解释这两个概念: --- 一、 什么是逃逸分析(Escape Analysis)? 逃逸分析并不是一种优化动作,而是一种“分析技术”。 它的作用是:分析一个对象在被创建后,其作用域是否超出了当前的方法或线程。如果编译器发现一个对象不会“逃”出当前方法,就可以对它进行极其激进的优化。 根据对象的作用域,逃逸分析将其分为三种状态: 1. 不逃逸(No Escape): 对象只在当前方法内部使用,完全不会被外部访问。(优化的重点对象) 2. 方法逃逸(Method Escape): 对象在一个方法中被创建,但作为参数传递给了另一个方法,或者作为返回值返回给了调用者。它逃出了当前方法,但可能没有逃出当前线程。 3. 线程逃逸(Thread Esc...