我是编译器设计的新手,并且使用 java 也有几年了。
使用this和 paper 看起来经过类层次结构分析和快速类型分析后会得到信息来进行去虚拟化。但是在哪里修补源代码或字节码的信息。以及如何检查结果?
试图了解事情到底是如何发生的,但卡在这里。 例如:我们有一个取自上面指定论文的示例程序。
public class MyProgram {
public static void main(String[] args) {
EUCitizen citizen = getCitizen();
citizen.hasRightToVote(); // Call site 1
Estonian estonian = getEstonian();
estonian.hasRightToVote(); // Call site 2
}
private static EUCitizen getCitizen() {
return new Estonian();
}
private static Estonian getEstonian() {
return new Estonian();
}
}
使用类层次结构方法,我们可以得出结论,因为没有任何子类重写 hasRightToVote() ,动态方法调用可以替换为对 Estonian#hasRightToVote() 的静态过程调用。但是在哪里替换这些信息以及如何替换呢?如何告诉 JVM(喂给 JVM)我们在分析过程中收集到的信息。
您不能更改源代码并将其放在那里吗?谁能给我提供一个例子,以便我可以开始尝试新的方法进行分析,并且仍然能够修补该信息。 谢谢。
最佳答案
类层次结构分析是虚拟机本身在运行时完成的优化,您无需告诉虚拟机任何内容。它只是根据类文件中的可用信息自行进行分析。
关于java - 在哪里修补程序分析期间收集的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30666274/