jvm源代码中JavaDevice的内部功能是什么

jvm源代码中JavaDevice的内部功能是什么,jvm,Jvm,在java代码中,有一行关于int k=j/3 j/3的单字节代码为IDIV jvm源代码级别的IDIV是什么 它需要一些c/c++代码或asm代码 如何在jvm源代码中找到它?从Java字节码到机器码没有固定的映射。它取决于目标平台,不是静态的。首先,字节码按原样执行(我会说是解释的,但有些人不喜欢这个词)。然后,它们会在一段时间后通过JIT转换为机器代码,但实际的映射可能也会有所不同。特别感谢您的评论:)我的问题的原始要求是,我对i/8和i>>3在linux上的性能很感兴趣,从结果来看,性能

在java代码中,有一行关于int k=j/3

j/3的单字节代码为IDIV

jvm源代码级别的IDIV是什么

它需要一些c/c++代码或asm代码


如何在jvm源代码中找到它?

从Java字节码到机器码没有固定的映射。它取决于目标平台,不是静态的。首先,字节码按原样执行(我会说是解释的,但有些人不喜欢这个词)。然后,它们会在一段时间后通过JIT转换为机器代码,但实际的映射可能也会有所不同。

特别感谢您的评论:)我的问题的原始要求是,我对i/8和i>>3在linux上的性能很感兴趣,从结果来看,性能几乎相同。我猜在asm代码中,i/8可能优化为asm代码sar?但我不确定。。。我需要访问jvm c或asm代码来验证我的猜测是对是错…@yaoweijq用
i>>3
替换
i/8
是最简单的技巧之一,只要满足必要的先决条件,jvm肯定可以做到。例如,只有当数字为正数时,它才起作用,因此JVM可能仅使用此替换生成代码,当它可以证明数字始终为正数时,或者插入处理负数的代码,或者只是不使用此技巧,具体取决于周围的条件。但是,根据周围的条件,如果结果不是真的需要,它也可能删除整个操作。@Holger我也用g++尝试了类似的代码,编译器直接用i/8到sar优化asm代码,所以我对java/jvm有类似的猜测。java编译器现在从未优化过。已删除优化标志。这是有意的(尽管它可能会再次改变)。其思想是JIT(即时编译器)在运行时进行优化。所以,正如我写的,你真的不知道你会得到什么汇编代码。首先,您根本不会得到汇编代码,当JIT有机会编译和优化代码时,结果将取决于许多因素,并且在同一台机器上运行同一程序时,结果可能会有所不同。@ewramner非常感谢。这个问题似乎非常复杂:)。我不知道为什么会有人投反对票。现在我想我站在jvm/jit之家的大门外。