Java - SAM类型优化

标签 java optimization jvm internals java-8

A working document描述 Project Lambda 的状态提到了所谓的 SAM(单一抽象方法)类型。据我所知,当前的 lambda 提案不会影响运行时,只会影响编译器,因为它可以实现从 lambda 表达式到这些类型的自动转换。

我认为在理想情况下,SAM 类型的实例可以在内部由函数指针表示。因此 JVM 可以避免为这些实例分配内存。

我想知道现代虚拟机是否能够提供这种优化。

最佳答案

@Tamás 您可能应该阅读 Brian Goetz 的邮件列表帖子:

http://mail.openjdk.java.net/pipermail/lambda-dev/2011-August/003877.html

基本上,lambda 抽象目前是使用对象实现的。但是,它被设计为允许 lambda 的替代实现,这将比类的实例“更小”。

您可以认为这种情况类似于自动装箱 - 整数被装箱为整数,但具有“更小”的表示形式(如整数)。

目前,lambda 必须装箱到 SAM 类型的实例,因为 JVM 目前无法用任何更小的构造来表示 lambda。将来,可能会有一个新的 JVM 标准,其中包括可以将 lambda 表示为对象以外的其他东西的“原始函数”。

因此,为了回答您的问题,您在上面提出的优化类型可能是可行的,但它可能会伴随 Java 8 之后的“原始函数”工作而不是特定于实现的功能。

关于Java - SAM类型优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7080479/

相关文章:

c# - 查找所有出现的对象实例化

java - JVM内存和CPU使用的实际限制?

java - Java 字节码中的平台独立性

Java 语法 : Why does this variable declaration work?

java - Apache DateUtils : parsing a date with multiple patterns

Java JSON写入double

java - 如何使用java将GMT日期转换为MM/dd/yyyy

c - 许多小型功能

Python:如何找到文件列表中最常见的元素

java - 包含C语言Machine依赖 native 代码的Java程序?