Java的API调用优化

来源:互联网 发布:协同过滤算法 python 编辑:程序博客网 时间:2024/06/10 01:04

1.使用clone()函数创建通用型对象以加快创建速度,并且不会调用构造器,原有对象值得以保留。
2.对于返回值为布尔类型的条件不要再用布尔值判断相等,这样字节码减少,执行效率高。
3.用三目条件运算符代替if—else。
4.当不需要访问对象内部时,用静态方法代替实例方法,这样速度更快更省内存。因为实例方法要针对对象生成一个函数导向表来支持多态。
5.final确保方法不会重载,并给予保护。
6.能用多态尽量不要用instanceof。
7.能用局部变量就用局部变量,局部在栈中;静态、实例对象在堆中。
8.尝试用位运算代替乘除运算,尝试用布尔运算代替位运算。
9.一维数组比二维数组慢,因为二维数组是JVM牺牲了大约10倍的空间换来的时间效率。
10.JVM分配内存有两种方式:指针碰撞(适用于Java堆绝对规整的时候),空闲列表(适用于不规整的时候,类似于FF、BF、WF算法)。具体采用哪种由Java堆是否规整决定,而Java堆是否规整由GC是否有压缩整理功能决定。
11.内存分配还要考虑同步和独立性(线程有自己的内存空间)。
12.对象:对象头、实例数据、对齐填充。对象头:对象自身数据(哈希码、GC年龄、线程锁)。类型指针(用来确定属于哪个类)。
13.Java要求对象的起始地址必须是8字节的整数倍。
14.Java通过栈上的引用来寻找对象:直接指针和句柄(二级指针)。
15.Switch语句中避免参数项的各种形式的重复,如:字母和相应的UTF-16值,虽然形式不同,但结果是一样的。
16.Java支持的switch参数的string类型来自于编译器级别,在JVM层次依然是整数兼容型。
17.Java对switch的优化:一个case=if;一个case+default=if-else;再多,用哈希值代表数值参数,并且对比时仍然用equals,因为哈希函数可能产生冲突。