javac 优化标志[重复]

问题描述 投票:0回答:5

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

我已经习惯了:

gcc -O3 -NDEBUG MyProgram.c

是否有类似的命令

javac

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

java optimization javac
5个回答
34
投票

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

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


20
投票

没有相当于

-O3
或任何
-O
级别的功能,但您可以通过
-XX:
访问特定的调整选项。 这里有完整的列表。

这假设您正在使用 Oracle 提供的 JVM,但是,它可能会根据您的环境而有所不同(“使用 JDK”并不能真正描述您正在使用哪个版本)


16
投票

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

商业客户端软件必备。


4
投票

根据 Hotspot VM 认为合适的情况,在运行时应用 Java 代码优化。 (据我所知,这涉及跟踪方法调用计数并将频繁调用的方法编译为本机代码并尝试几种类型的优化。)

您可以与

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

启动虚拟机时,您可以在

-server
-client
选项之间进行选择,这将影响优化的范围以及优化的启动时间。


1
投票

JVM 和 JIT 将在运行时对您的代码进行大部分优化,因此您必须硬着头皮并信任底层字节码操纵器(JVM 和 JIT)来进行优化。

© www.soinside.com 2019 - 2024. All rights reserved.