一文讲清:匿名内部类为什么不理想?

发布时间:2026/6/3 17:15:26

一文讲清:匿名内部类为什么不理想? 一般来说匿名内部类有一些不理想的特性会影响应用程序的性能。 首先编译器会为每个匿名内部类生成一个新的类文件。文件名通常为 ClassName$1 其中 ClassName 是定义匿名内部类的类名后面跟一个美元符号和一个数字。生成许多类文件是不可取的因为每个类文件在使用前都需要加载和验证这会影响应用程序的启动性能。加载可能是一项昂贵的操作包括磁盘 I / O 和解压缩 JAR 文件本身。如果将 lambda 转换为匿名内部类那么每个 lambda 都需要一个新的类文件。每个匿名内部类在加载时都会占用 JVM 的元空间即 Java 8 中永久生成的替代空间。如果 JVM 将每个匿名内部类中的代码编译成机器代码则会将其存储在代码缓存中。此外这些匿名内部类将被实例化为单独的对象。因此匿名内部类会增加应用程序的内存消耗。为了减少所有这些内存开销引入缓存机制可能会有所帮助这也是引入某种抽象层的原因。 最重要的是如果从一开始就选择使用匿名内部类来实现 lambda 就会限制未来 lambda 实现变化的范围以及它们与未来 JVM 改进保持一致的能力。让我们来看下列代码import java.util.function.Function; public class AnonymousClassExample { FunctionString, String format new FunctionString, String() { public String apply(String input){ return Character.toUpperCase(input.charAt(0)) input.substring(1); } }; }

相关新闻