java 性能优化读书笔记(二)

本文探讨了在程序开发中优化集合访问代码、远程对象调用、字符串操作等常见问题,提供了ValueObject模式、业务代理模式、缓冲类等解决方案,并详细解释了String subString()方法可能导致的内存泄露问题及替代方案。此外,还强调了使用BufferedWriter或BufferedOutputStream进行IO操作的重要性,以及如何在List和Map接口中进行更高效的访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Value Object模式
当需要多次远程调用对象的时候,可以不存在逻辑关系,可以把远程对象封装成一个对象,这样只会调用一次,可以大大减少远程访问量。
2、业务代理模式
如果Service层需要多次远程调用对象,可以封装一个类,这样在调用的时候可以缓存一下已经取到的对象,可以大大提高效率
3、缓冲类(Buffer)
在进行IO操作的时候务必使用BufferedWriter或者BufferedOutputStream来进行包装,这样可以大大提高性能
4、String subString()方法可能引起内存泄露
subString()方法由于是自动扩展内部的char[]常用空间换时间的加速策略,但是这样是有可能造成内存泄露的。同时使用这个方法的其他的方法如valueOf(char),replace(int,int)....都有可能造成内存泄露
5、字符串的分割
split 功能强大,担心效率不高。
[color=red]StringTokennizer 功能强大而且效率优于split 以后可以代替split[/color]
indexOf()+subString()效率最高,可读性差,追求效率的系统可以选择。
同时使用charAt()方法也高远startsWith()
6、StringBuilder与StringBuffer
2个对象的默认值是16,如果超过16会自动扩展。但是由于我们要生成的类都是大于16,所以建议使用的时候直接指定容量参数可以大大提高性能。
7、list接口
ArrayList 与LinkedList
(1)如果是末尾通过add()方法来添加对象可以使用ArrayList效率更高
(2)如果通过add(int index,E element)方法来添加对象LinkedList会大大提高效率。
(3)采用E remove(int index)方法来删除元素的时候,ArrayList算法是从最后的开始搜索,LinkedList 二叉分法。所以元素在前面或者后面LinkedList 效果更高,在中间ArrayList效率更高
(4)同样在使用ArrayList的时候必须指定一个初始长度。默认为10
(5)编历数组
forEach效率最低,其次迭代器,for循环效率最高
[color=red]但是LinkedList如果使用get(i) 这样的随机访问方法,会大大的降低效率。因为LinkedList并没有实现RandomAccess接口。[/color]它用get(i)方法底层是通过迭代器来一个个编列的。
8、Map接口
(1)hashCode()这个方法是一个native方法,这个方法可以重新但是不建议这样做。
(2)HashMap 默认容量为16,超过这个数建议设置长度
(3)LinkedHashMap 是一个有序的hashmap。它的顺序是元素进入集合或者被访问的先后顺序。而且它的get(i)方法会修改链表结构。
(4)TreeMap 可以基于key进行排序,如果要实现排序的hashMap。建议使用TreeMap来完成。
9、优化集合访问代码
(1)、分离循环中的代码

for(int i=0;i<map.size();i++){
}

建议写成

int size =map.size();
for(int i=0;i<size ;i++){
}

(2)、减少相同的操作
(3)、减少方法的调用
[color=red]如果集合可以访问内部元素,优先使用内部元素可以比使用方法更有效率[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值