Java的代码优化机制分为两部分:编译优化和运行优化。
编译优化阶段是在把java代码转化为class文件的过程优化,主要是在eclipse等编译器中进行的编译过程。在编译过程中,带有的优化措施有:
1.注解的处理
2.解语法糖 需要解的语法糖有泛型、循环遍历、自动装箱、拆箱条件等
注解在编译阶段优化是因为大多数的注解是在java代码层面以上的,语法糖则是因为它可以提高编码的效率。编译阶段主要集中在可以正确并有效的生成class文件,集中在java易用性上的优化。
编译阶段的优化需要我们注意注解是注入到什么层面的,语法糖的具体实现细节。由于语法糖并不能对代码的提供实质性的改进,所有了解细节有助于规避其中的细节问题。编译时期的优化的要求是会熟练使用编程语言java。
运行优化阶段是class文件转化为本地机器代码的过程优化,主要是在JVM中进行的。在运行优化阶段,JVM会对class文件中频繁用到的方法从解释执行转化为编译执行,进行深度的优化,这个也是JVM对class文件运行的一项重要的效率保证措施。至于如何统计运行频率,这个对当前主题来说可以跳过。在运行时优化的过程中,采取的优化措施有的比较的保守,有的非常激进。保守的公共子表达消除,方法内联等;激进的优化措施可能类似于计算机指令执行过程中的条件猜测。采用这些措施之后,会在class文件转化为机器代码的过程中合并代码,移除dead code等,这些操作做完之后,你可能发现将这些机器代码进行反编译的时候产生的代码结果与java的源码文件出现了差异。差异就是我们编写代码中做的还不够的地方。
当然也有一些公司或者组织提供了一些工具,帮助扫描代码去除有冗余或者dead code等内容,这些工具是基于class文件进行工作的。当要使用工具扫描的时候,请先编译java文件,因为这些工具也是基于运行优化技术的工具。
编译优化阶段对代码优化的要求很低,不过运行优化对代码的优化会让源码的痕迹的很模糊,特别是没有优化记录时。我们在编写代码的时候,根据编译时期的优化,需要正确使用java的语法规则就可以了;根据运行优化时期的优化,需要平时不断的对编码时期的逻辑的全面性进行提升,是一种不断锻炼和提升的能力,这个可以区分编码人员的功力水平。