标签: bytecode

为什么2*(i*i)比Java中的2*i*i更快?

以下Java程序平均需要在0.50到0.55之间运行:

public static void main(String[] args) {
    long startTime = System.nanoTime();
    int n = 0;
    for (int i = 0; i < 1000000000; i++) {
        n += 2 * (i * i);
    }
    System.out.println((double) (System.nanoTime() - startTime) / 1000000000 + " s");
    System.out.println("n = " + n);
}
Run Code Online (Sandbox Code Playgroud)

如果我更换2 * (i * i)2 * i * i,它需要0.60〜0.65s之间运行.怎么会?

我运行了每个版本的程序15次,在两者之间交替.结果如下:

 2*(i*i)  |  2*i*i
----------+----------
0.5183738 | 0.6246434
0.5298337 | 0.6049722
0.5308647 | 0.6603363
0.5133458 | 0.6243328
0.5003011 | …
Run Code Online (Sandbox Code Playgroud)

java performance benchmarking jit bytecode

833
推荐指数
10
解决办法
24万
查看次数

你能"编译"PHP代码吗?

我知道PHP在服务器上运行之前被编译为字节代码,然后可以缓存该字节代码,这样就不必为每个Web访问重新解释整个脚本.

但是你可以"编译"php并上传一个二进制文件,它只能由字节码解释器运行吗?

php bytecode

221
推荐指数
7
解决办法
23万
查看次数

为什么Java类用空行编译不同?

我有以下Java类

public class HelloWorld {
  public static void main(String []args) {
  }
}
Run Code Online (Sandbox Code Playgroud)

当我编译这个文件并在生成的类文件上运行sha256时,我得到了

9c8d09e27ea78319ddb85fcf4f8085aa7762b0ab36dc5ba5fd000dccb63960ff  HelloWorld.class
Run Code Online (Sandbox Code Playgroud)

接下来我修改了类并添加了一个如下所示的空白行:

public class HelloWorld {

  public static void main(String []args) {
  }
}
Run Code Online (Sandbox Code Playgroud)

我再次在输出上运行sha256,期望得到相同的结果,但我得到了

11f7ad3ad03eb9e0bb7bfa3b97bbe0f17d31194d8d92cc683cfbd7852e2d189f  HelloWorld.class
Run Code Online (Sandbox Code Playgroud)

我已阅读此TutorialsPoint文章:

只包含空格的行(可能带有注释)称为空行,Java完全忽略它.

所以我的问题是,由于Java忽略空行,为什么两个程序的编译字节码都不同?

即在该差HelloWorld.class一个0x03字节是由替换0x04字节.

java bytecode compilation javac

206
推荐指数
4
解决办法
1万
查看次数

Android 7的Java 7语言功能

只是想知道是否有人尝试过使用Android的新Java 7语言功能?我知道Android会读取Java吐出的字节码并将其转换为dex.所以我想我的问题是它能理解Java 7的字节码吗?

java android bytecode java-7

189
推荐指数
5
解决办法
5万
查看次数

字节码功能在Java语言中不可用

目前(Java 6)您可以在Java字节码中使用Java语言无法做到的事情吗?

我知道两者都是图灵完整的,所以读"可以做"就是"可以做得更快/更好,或者只是以不同的方式".

我正在考虑invokedynamic使用Java生成的额外字节码,除了特定的字节码是针对未来的版本.

java jvm bytecode

144
推荐指数
6
解决办法
6万
查看次数

Java的虚拟机和CLR

作为MSIL和Java字节码之间的差异问题的一种跟进,Java虚拟机的工作方式(主要)差异或相似之处是什么?.NET Framework 公共语言运行时(CLR)有效吗?

还有,是 .NET框架 CLR是"虚拟机"还是没有虚拟机的属性?

.net java cil bytecode vm-implementation

136
推荐指数
4
解决办法
4万
查看次数

如何在.emacs.d目录中对所有内容进行字节编译?

我决定查看Emacs,我非常喜欢它.现在,我正在使用Emacs入门套件,它提供了更好的默认设置和一些很好的自定义默认安装的Emacs.

我已经定制了一点,添加了一些东西,如yasnippet,颜色主题,未绑定和其他东西.我已经设置了一个github存储库,我保留了所有的自定义设置,这样我就可以从多个地方访问它们,或者万一我的.emacs.d目录丢失了.

所有这一切都非常好,但是有一个问题:Emacs大约需要1-2秒才能加载.AFAIK我可以使用Mx byte-compile-file编译单个.el文件到.elc,它可以工作.但是有很多.el文件,我想知道是否有办法用简单的命令或其他东西编译它们,以加快Emacs的加载速度.我的Emacs并不总是打开,我经常打开和关闭它,特别是在我将其设置为Total Commander中的编辑命令的默认编辑器以便更快地习惯它(是的,windows xp这里).

我的Emacs版本是22.3.是的,没有任何自定义的默认Emacs安装会立即启动.

我不确定在加载时,首选哪个版本,.el或编译.elc的方式是Oo

那么,是否有一个elisp命令或Emacs命令行开关使Emacs在.emacs.d目录中进行字节编译?

emacs elisp bytecode dot-emacs

131
推荐指数
4
解决办法
4万
查看次数

C++性能与Java/C#

我的理解是C/C++生成在特定机器架构上运行的本机代码.相反,Java和C#等语言运行在虚拟机之上,该虚拟机将本机架构抽象化.逻辑上,由于这个中间步骤,Java或C#似乎不可能匹配C++的速度,但是我被告知最新的编译器("热点")可以达到这个速度甚至超过它.

也许这更像是一个编译问题,而不是一个语言问题,但任何人都可以用简单的英语解释这些虚拟机语言之一如何比母语更好地执行?

c# c++ java performance bytecode

119
推荐指数
9
解决办法
40万
查看次数

如何在字节码级别实现Scala中的模式匹配?

如何在字节码级别实现Scala中的模式匹配?

它是否像一系列if (x instanceof Foo)结构或其他东西?它的性能影响是什么?

例如,给定以下代码(来自Scala By Example第46-48页),该方法的等效Java代码如何eval

abstract class Expr
case class Number(n: Int) extends Expr
case class Sum(e1: Expr, e2: Expr) extends Expr

def eval(e: Expr): Int = e match {
  case Number(x) => x
  case Sum(l, r) => eval(l) + eval(r)
}
Run Code Online (Sandbox Code Playgroud)

PS我可以读取Java字节码,因此字节码表示对我来说已经足够了,但是对于其他读者来说,知道它看起来像Java代码会更好.

PPS Scala编程是否能够解答这一问题以及有关Scala如何实现的类似问题?我订购了这本书,但尚未到货.

performance scala bytecode pattern-matching

118
推荐指数
3
解决办法
1万
查看次数

是否可以查看Class文件的字节码?

可能重复:
是否有java类文件/字节码编辑器来编辑指令?

Java源代码被编译成字节码,实际上是在类文件中.是否可以查看已编译类的字节码?

如果可能,可以编辑吗?

是否有可用的eclipse插件?

java bytecode bytecode-manipulation

98
推荐指数
4
解决办法
7万
查看次数