【问题标题】:Java/Android code optimization: Does Java remove unreachable code on buildJava/Android 代码优化:Java 是否删除构建时无法访问的代码
【发布时间】:2011-06-18 09:24:40
【问题描述】:

请看一下这段代码 android 示例:

private static final boolean aBoolean = false;

...

if(aBoolean){
   //do something like logs
}

在这种情况下,由于 aBoolean 的值为 false 并且它不能在运行时更改, //do something like logs 语句会被 on build 忽略还是仍然会被 build 并且每次它都会评估如果?

我正在尝试找到像预处理器 #DEFINE #IF... 这样的行为,以便在编码时获取日志,在释放时切换一个值,而我的所有调试代码都会被完全忽略。

(我还想指出,我的问题是面向 android 的,所以如果 Java 和 Android 在这个问题上存在差异,请告诉我)

【问题讨论】:

    标签: java android optimization


    【解决方案1】:

    检查变量以进行日志记录是完美的发现。即使代码没有得到优化,检查布尔条件也几乎是无操作的,而且您过早地进行了优化。

    但要回答你的问题,它可能会被优化出来。

    【讨论】:

      【解决方案2】:

      如果语句不可达,这总是会给出编译时错误.....

      例如。如果您使用 return statemnt b4 任何代码,这将导致编译时错误。

      但是如果你使用这种类型的代码

      如果(布尔值){ //做一点事 }

      这些不会被java避免或不会被java删除......

      【讨论】:

      • 至少对于桌面java来说不是这样,代码会被JIT去掉。并且代码不会产生编译时错误。
      • 为什么 -1 在使用 return 之后尝试放置任何语句而没有任何条件。这将给出错误“无法访问的代码语句”。
      • if-clauses with known-false 条件明确排除“无法访问的代码”检测,正是为了允许这样的事情(基于编译时的条件执行值)。试试看,你会看到的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多