Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.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 谁能告诉我这个字节码是干什么的吗?_Java_Android_Bytecode - Fatal编程技术网

Java 谁能告诉我这个字节码是干什么的吗?

Java 谁能告诉我这个字节码是干什么的吗?,java,android,bytecode,Java,Android,Bytecode,这段代码是用于填充ram内存的android应用程序的一部分。此代码出现在函数中,用于填充10 mb的ram内存。有人能解释一下它的工作原理吗?因为我没有字节码方面的经验,请推荐几个能快速掌握字节码知识的网站。谢谢。字节码是JVM(Java虚拟机)的指令集。Java程序员实际上不必理解字节码。JVM使用字节码使Java程序可移植,这意味着它可以在任何平台(Windows、MAC、UNIX、LINUX……)上运行 平台上的JRE解释字节码并将其转换为平台的本地ObjectCode 你可以参考 有关

这段代码是用于填充ram内存的android应用程序的一部分。此代码出现在函数中,用于填充10 mb的ram内存。有人能解释一下它的工作原理吗?因为我没有字节码方面的经验,请推荐几个能快速掌握字节码知识的网站。谢谢。

字节码是JVM(Java虚拟机)的指令集。Java程序员实际上不必理解
字节码
。JVM使用字节码使Java程序可移植,这意味着它可以在任何平台(Windows、MAC、UNIX、LINUX……)上运行

平台上的JRE解释字节码并将其转换为平台的本地ObjectCode

你可以参考
有关详细信息

从名称
MainActivity$4$1
判断,此代码必须来自
MainActivity
内嵌套匿名类中的方法

Java代码应该是这样的:

            // Byte code:
            //   0: aload_0
            //   1: monitorenter
            //   2: aload_0
            //   3: getfield 17 me/empirical/android/application/fillmemory/MainActivity$4$1:this$1 Lme/empirical/android/application/fillmemory/MainActivity$4;
            //   6: getfield 28 me/empirical/android/application/fillmemory/MainActivity$4:this$0   Lme/empirical/android/application/fillmemory/MainActivity;
            //   9: bipush 10
            //   11: aload_0
            //   12: getfield 17    me/empirical/android/application/fillmemory/MainActivity$4$1:this$1 Lme/empirical/android/application/fillmemory/MainActivity$4;
            //   15: getfield 28    me/empirical/android/application/fillmemory/MainActivity$4:this$0   Lme/empirical/android/application/fillmemory/MainActivity;
            //   18: invokestatic 34    me/empirical/android/application/fillmemory/MainActivity:access$300 (Lme/empirical/android/application/fillmemory/MainActivity;)Landroid/widget/Button;
            //   21: invokestatic 38    me/empirical/android/application/fillmemory/MainActivity:access$100 (Lme/empirical/android/application/fillmemory/MainActivity;ILandroid/widget/Button;)V
            //   24: aload_0
            //   25: monitorexit
            //   26: return
            //   27: astore_1
            //   28: aload_0
            //   29: monitorexit
            //   30: aload_1
            //   31: athrow
            //   32: astore_1
            //   33: goto -9 -> 24
            // Local variable table:
            //   start  length  slot    name    signature
            //   0  36  0   this    1
            //   27 4   1   localObject Object
            //   32 1   1   localException  Exception
            // Exception table:
            //   from   to  target  type
            //   2  24  27  finally
            //   24 26  27  finally
            //   28 30  27  finally
            //   2  24  32  java/lang/Exception

您可以在Internet上找到许多Java字节码教程。然而,最终的参考是:。

搜索jvm指令集或类似的指令集将找到足够的站点,monitorenter/exit是一个
同步的
块;没有什么麻烦的事情发生。有一些工具可以帮你拆开它。看起来这应该继续重新堆叠交换。
synchronized (this) {
    try {
        methodInMainActivity(MainActivity.this, 10, methodThatReturnsButton(MainActivity.this));
    } catch (Exception localException) {}
}