Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JVM指令中,有些指令具有不同的前缀,但它们的功能非常相似。我们真的需要它们吗?若有,原因为何?_Java_Jvm_Java Bytecode Asm - Fatal编程技术网

Java 在JVM指令中,有些指令具有不同的前缀,但它们的功能非常相似。我们真的需要它们吗?若有,原因为何?

Java 在JVM指令中,有些指令具有不同的前缀,但它们的功能非常相似。我们真的需要它们吗?若有,原因为何?,java,jvm,java-bytecode-asm,Java,Jvm,Java Bytecode Asm,用于添加:iadd/ladd/fadd/dadd, 对于sub:isub/lsub/fsub/dsub, 对于mul:imul/lmul/fmul/dmul 用于div:idiv/ldiv/fdiv/ddiv 对于rem:irem/lrem/frem/drem 从负开始:ineg/lneg/fneg/dneg 我们能否仅使用一条指令(例如,添加)来替换所有添加指令 如果Q1的答案是正确的,那么这会比当前的解决方案获得更好的性能吗 如果Q1为假,为什么 问题1:我们能否只使用一条指令,例如,add

用于添加:iadd/ladd/fadd/dadd, 对于sub:isub/lsub/fsub/dsub, 对于mul:imul/lmul/fmul/dmul 用于div:idiv/ldiv/fdiv/ddiv 对于rem:irem/lrem/frem/drem 从负开始:ineg/lneg/fneg/dneg

  • 我们能否仅使用一条指令(例如,添加)来替换所有添加指令
  • 如果Q1的答案是正确的,那么这会比当前的解决方案获得更好的性能吗
  • 如果Q1为假,为什么
  • 问题1:我们能否只使用一条指令,例如,add to实现所有add指令

    不,他们被定义做不同的事情。相似,但不同

    如果Q1为假,为什么

    因为这就是他们定义它的方式。字节码指令集设计为紧凑、代码生成简单,并且能够表达Java语义。指令集满足这些目标。。。很好


    JVM字节码指令集也被设计为稳定的;i、 e.允许20多年前编译成字节码的Java代码仍然可以在当前JVM上执行。对破坏兼容性的指令集的更改是令人憎恶的:它们不会发生。

    就像在真实的机器中一样,对double或int求反不能有相同的指令。这些指令在位级别上的工作方式确实不同,只有在足够高的抽象级别上(即对数字求反)才是相同的


    这就是为什么我们有更高级的语言来抽象掉无趣的机器细节。但是在汇编语言中,区别是必不可少的。

    非常相似与完全相同是完全不同的。如果所有这些说明都做了同样的事情,你真的认为它们都会存在吗?这只是命名法。Java为不同的参数类型选择了显式不同的名称,否则可能是相同名称的“重载”。本质上,它们是不同的指令,无论它们是否共享助记符号。