Jvm stubRoutine、StubAssembler类的使用

Jvm stubRoutine、StubAssembler类的使用,jvm,Jvm,我想知道, 1.上述类的使用以及如何使用。 2.无论它是在c1和c2编译器中使用,还是仅在其中一个编译器中使用?VM存根是在VM启动时动态生成的平台特定程序集中的可重用函数 回答您的问题时的评论: // StubRoutines provides entry points to assembly routines used by // compiled code and the run-time system. Platform-specific entry // points are defi

我想知道, 1.上述类的使用以及如何使用。 2.无论它是在c1和c2编译器中使用,还是仅在其中一个编译器中使用?

VM存根是在VM启动时动态生成的平台特定程序集中的可重用函数

回答您的问题时的评论:

// StubRoutines provides entry points to assembly routines used by
// compiled code and the run-time system. Platform-specific entry
// points are defined in the platform-specific inner class.
这些入口点在VM、解释器和两个编译器之间共享。示例功能包括:

  • 阵列拷贝
  • 原子的
  • throw_NullPointerException,throw_StackOverflower错误
  • 加密AES,解密AES
  • sin,cos,log,exp
  • 等等

是一个宏汇编程序,用于生成一些特定于C1的存根,用于引发和捕获异常、重新填充TLAB、处理monitorenter、checkcast等缓慢情况。

我编写了一些小java代码,并使用了Arrays.copyOf()函数。然后我使用printcompilation标志转储了编译器日志。但是arraycopy机器代码转储和JVM_arraycopy(使用libjvm.so的objdump转储)不匹配。但我可以看到“compile_kind='c2n'”输出,然后是java.lang.System::arraycopy(本机)(静态)打印。我想知道为什么使用objdump的机器代码与日志文件输出中的机器代码不匹配?@hareeshr
objdump
提供嵌入二进制文件的静态版本,但编译器使用的存根是在运行时动态生成的。谢谢。我仔细阅读了代码,在c1中找到了arraycopy的内在实现(lir_arraycopy),它调用do_调用,我坚持在那里。我找不到实际的实现在哪里?@hareeshr In