原文 | Stephen Toub 翻译 | 郑子铭 堆栈替换 (On-Stack Replacement) 堆栈替换 (OSR) 是 .NET 7 中最酷的 JIT 功能之一。但要真正了解 OSR,我们首先需要了解分层编译 (tiered compilation),所以快速回顾一下…… 具有 JIT 编译器的托管环境必须处理的问题之一是启动和吞吐量之间的权衡。从历史上看,优化编译器的工作就是优化,以便在运行时实现应用程序或服务的最佳吞吐量。但是这种优化需要分析,需要时间,并且执行所有这些工作会导致启动时间增加,因为启动路径上的所有代码(例如,在 Web 服务器可以为第一个请求提供服务之前需要运行的所有代码)需要编译。因此 JIT 编译器需要做出权衡:以更长的启动时间为代价获得更好的吞吐量,或者以降低吞吐量为代价获得更好的启动时间。对于某些类型的应用程序和服务,权衡很容易,例如如果您的服务启动一次然后运行数天,那么启动时间多几秒并不重要,或者如果您是一个控制台应用程序,它将进行快速计算并退出,启动时间才是最重要的。但是 JIT...