深入理解java虚拟机学习笔记(七)--早期(编译期)优化

第十章 早期(编译期)优化
1、概述
java语言的“编译期”是一段“不确定”的操作过程,因为它可能是指一个前端编译器(其实叫“编译器的前端”更准确一些)把*.java转变成*.class文件的过程;也可能是批虚拟机的后端运行期编译器(JIT编译器)把字节码转变成机器码的过程;还可能是指使用静态提前编译器(AOT编译器,Ahead Of Time Compiler)直接把*.java文件编译成本地机器代码的过程。
2、由于编译器进行了常量折叠,“a=1+2”比起直接定义“a=3”,并一会增加程序的运算量。
3、方法重载要求方法具备不再的特征签名,返回值并不包含在方法的特征签名之中,所以返回值不参与重载选择,但是在Class文件格式之中,只要描述符不是完全一致的两个方法就可以共存。但是在JDK7中如下是不允许的,在1.6中是允许的。
public class GenericTypes {
public static String method(List<String> list){
System.out.println("invoke method(List<String> list)");
return "";
}

public static int method(List<Integer> list){
System.out.println("invoke method(List<Integer> list)");
return 1;
}

public static void main(String[] args) {
method(new ArrayList<String>());
method(new ArrayList<Integer>());
}
}
4、“==”运算在没有遇到算要运算的情况下不会以自动拆箱,而它们的equals()方法不会以处理数据转型的关系,在实际编码中就尽量避免这样使用自动装箱与拆箱。
Integer a = 1;
Integer b =2;
Integer c =3;
Integer d = 3;
Integer e = 321;
Integer f = 321;
Long g = 3L;
System.out.println(c == d); //true 小于127会直接比较int的值,有缓存常量
System.out.println(e == f); //false 大于127不会,直接按对象处理
System.out.println(c == (a+b)); //true 小于127
System.out.println(c.equals(a + b)); //true 比较值
System.out.println(g == (a+b)); //true int转long ,小于127
System.out.println(g.equals(a+b)); //false equals不会装箱,不会int转long 类型不匹配
5、Java程序命名规范
类(或接口):符合驼式命名法,首字母大写。
方法:符合驼式命名法,首字母小写。
字段:类或实例变量:符合驼式命名法,首字母小写。
常量:要求全部由大写字母或下划线构成,并且第一个字符不能是下划线。
6、可以通过Javac命令的“-processor“参数来执行编译时需要附带的注解处理器,如果有多个注解处理器的话,用逗号分隔。还可以使用-XprintRounds和-XprintProcessorInfo参数来查看注解处理器动作的详细信息。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值