java - 在哪里修补程序分析期间收集的信息

标签 java compiler-construction jvm

我是编译器设计的新手,并且使用 java 也有几年了。

使用thispaper 看起来经过类层次结构分析和快速类型分析后会得到信息来进行去虚拟化。但是在哪里修补源代码或字节码的信息。以及如何检查结果?

试图了解事情到底是如何发生的,但卡在这里。 例如:我们有一个取自上面指定论文的示例程序。

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/

相关文章:

java - 自动增量不适用于具有复合键的实体类

java - 我需要有人解释一下查询条件

c++ - 在 C++ 和编译器中内联

java - JConsole 在 Linux 中的位置

java - == 运算符在 Java 中是如何实现的?

java - 使用参数化 'jmh' 测量对多线程算法进行基准测试时出错

java - 读旧事件

Java tomcat线程内存使用限制

compiler-construction - 编译器优化安全吗?

C#pragma 是预处理还是编译时操作?