Android 中的 Java 代码编译器优化

标签 java android optimization compiler-optimization

假设我定义了这样一个字符串:

private final static String s = "To Be or not to be, that is the question";

在其中一个(静态)方法中,我调用了一个接收字符串作为参数的方法:

methodThatReceivesString(s.charAt(0) + s.charAt(1) + "Inter" + s.charAt(3) + s.charAt(4))

(想法是 methodThatReceivesString() 将传递值“ToInterBe”)

我的问题是:Java 编译器是否会优化代码,使编译后的二进制文件 (.jar .dex) 已经包含“ToInterBe”?

或者这只会在应用程序运行时发生?

最佳答案

Java 编译器不会执行此操作,因为它会在技术上更改程序,因为所涉及的方法可能会在运行时产生副作用。但即使它会预先计算字符串,它仍然需要将原始字符串放入类文件中,因为它可以通过反射访问,可能与注释或其他原因相关。

我认为您正在寻找的工具是 ProGuard .如果在预先计算所有静态可判定代码后不再有代码引用它,这实际上可以删除字符串。

关于Android 中的 Java 代码编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6038609/

相关文章:

java - 是否有 MSDN 成员(member)资格可以获得的 Java Profiler?

java - 为什么 javafx 矩形在调整父容器的 getWidth/Height 大小时不会显示其颜色?

java - 在 Java 中创建对象(继承和多态)

java - 如何通过 Swing gui 在后台线程中使用 jdbc

android - 编辑文本错误 : content duplicates after pressing a restricted character

android - setVolumeControlStream() 不工作

java - 在应用程序范围内共享一个对象

android - GoogleSignInAccount getIdToken() 为空

algorithm - 为什么在这种未定义的情况下,我对 Dijkstra 算法的实现会失败?

C函数参数优化: (MyStruct const * const myStruct) vs.(MyStruct const myStruct)