java - JIT 能否从泛型中获益?

标签 java optimization jit

众所周知,泛型类型无法在编译过程中存活下来。它们被类转换所取代。

但是,类型信息存在于类文件中并且可以使用反射看到:

public class Demo
{
    private List<String> list;

    public Demo() throws SecurityException, NoSuchFieldException
    {
        System.out.println(((Class<?>)((ParameterizedType) getClass().getDeclaredField("list").getGenericType()).getActualTypeArguments()[0]).getName());
    }

    public static void main(String[] args) throws SecurityException, NoSuchFieldException
    {
        new Demo();
    }
}

执行时,将打印 java.lang.String

JIT 能否将其用于某种优化?或者从 JIT 的角度来看,这些信息是无用的吗?

最佳答案

可以,但据我所知不能。为了解决这个问题,Scala 最近在编译时添加了一些支持 type specialization生成类的专门版本的通用代码——没有任何强制转换——并将它们透明地放置到代码库的其余部分,以便代码仍然按预期工作。在这些情况下,编译后的 Scala 代码实际上比 Java 快得多,因为具有泛型的 Java 将始终使用强制转换。

关于java - JIT 能否从泛型中获益?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6841839/

相关文章:

java - 如何下载com.sun.net.httpserver包?

java - 比较 Collectors.summingLong 和 Collectors.counting 的性能

java - Eclipse中有控制台功能吗?

c++ - 我可以将结构数组别名为结构成员数组吗?

java - JVM JIT 是否生成系统调用指令?

java - @Pathvariable 找不到编译错误

Java http请求性能不佳

java - 优化 SSE 代码

python - 是否可以调用间接调用另一个 cuda.jit 函数的 cuda.jit 函数?

java - 如何使用 Java 编译器重放文件来调试 JVM 问题