javac优化标志

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

我习惯了:

gcc -O3 -NDEBUG MyProgram.c 

javac有一个类似的命令吗?

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

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

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

没有相当于-O3或任何-O级别,但是您可以通过-XX:访问特定的调整选项-XX: 。 这里有完整的清单。

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

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

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

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

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

当您启动VM时,您可以在-server-client选项之间进行选择,这将影响优化范围以及它们的早期启动时间。

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