javac优化标志

时间:2011-02-14 21:32:48

标签: java optimization compiler-construction javac

我最近在C中编写了很多代码,现在正在切换到Java。我目前正在实现一个大型数据结构,并且想知道在调用Java编译器时是否可以打开任何优化标志以提高gcc中的性能。

我习惯了:

gcc -O3 -NDEBUG MyProgram.c

是否有javac的类似命令?

我正在使用JDK并且正在运行Ubuntu 10.04。

5 个答案:

答案 0 :(得分:25)

Java中的优化主要由JIT编译器在运行时完成。因此,没有必要尝试指示它在编译时优化某种方式(无论如何它只创建字节码)。 JIT几乎肯定会在现场做出更好的决策,了解确切的环境并观察代码特定部分的实际执行模式。

有一些特定的编译器选项会影响性能,但这些选项用于调优JVM(包括垃圾收集器)而不是优化代码本身。

答案 1 :(得分:17)

不等同于-O3或任何-O级别,但您可以通过-XX:访问特定的调整选项。有一个完整列表here

这假设您正在使用Oracle提供的JVM,它可能因您的环境而异(“使用JDK”并不能真正描述您正在使用的版本)

答案 2 :(得分:13)

您可以通过Proguard(一种流行的Java混淆器)运行Java字节代码来优化它。它将按顺序缩小,优化和混淆代码,使用交换机控制几乎所有内容。它将删除未使用的方法和变量,内联代码,删除死分支,合并相同的代码并执行许多其他优化。结果是一个jar文件,它与您的输入相同,但占用的空间更少,运行速度更快。

这是商业客户端软件的必备软件。

答案 3 :(得分:4)

在运行时期间应用Java代码优化,因为Hotspot VM认为合适。 (据我所知,这涉及跟踪方法调用计数并将经常调用的方法编译为本机代码并尝试多种类型的优化。)

可以与javac一起使用的唯一远程连接的开关是-g:none,它告诉编译器省略调试信息:这不会真正影响代码的性能,但会减小代码的大小.class个文件。

当您启动虚拟机时,您可以选择-server-client选项,这将影响优化范围及其启动时间。

答案 4 :(得分:1)

JVM和JIT将在运行时对您的代码进行大部分优化,因此您必须咬紧牙关并信任底层字节码操纵器(JVM和JIT)以进行优化。