5个优化java代码的性能的tips

5个优化java代码的性能的tips

尽可能于设置和的大小

和等基于数组的结构,都存在一个问题5个优化java代码的性能的tips,就是当不断添加数据超过阈值时,就会触发扩容操作,尽管这些类的大多数操作都很快,比如.get(index)是 o(1)时间复杂度,但是操作的时间都是O(n),并且可能会出现很多次的重复。

默认的容量为10,当数据超过10时候5个优化java代码的性能的tips,就会触发扩容,扩容操作为 = * 1.5;此时会变成15大小的数组。

假如我们需要添加500个元素到中,那么它的内部表现是这样的:10->15->22->33->74->111->167->250->375->563. 总共产生了9次扩容操作,每次操作都会复制一次整个数组,同时最后产生了一个563大小的数组java pair,而其实我们只需要500大小的数组,这里就导致了11%空间的浪费。

如果我们能明确值存储500个对象,就可以将大小直接设定为500。

ini

复制代码

List list = new (500);

这样就可以避免使用过程中的扩容操作以及浪费的45%内存(20大小的数组,只使用了11个位置,浪费了9个)。

的扩容情况比更严重,因为它含有一个扩容因子参数java pair,默认为0.75,当数据量达到容量的0.75时就会触发扩容。

因为有扩容因子的存在,对于大小的设置会有一点麻烦,推荐使用Guava的

Maps.(int size)方法,该方法内置了预期大小的计算.

ini

复制代码

Map map = Maps.(24);

对的复合key使用实体类包装

当我们在中使用复合的作为key时,使用一个实体类可以加快速度和避免内存分配。

错误方式

ini

复制代码

java pair

; Map ; // 获取数据 for (int i = 0; i < .; ++i) { .get(

+ “;” +

); }

正确方式

ini

复制代码

; Map

; // 获取数据 for (int i = 0; i < .; ++i) { .get(new Pair(

,

)); }

正确方式的性能是错误方式的3.7倍。

使用 替换

是java开发者非常熟悉的类,它的作用是用来生成随机数。它在功能上没有什么问题,唯一的问题是因为那部使用同步代码块,多个线程并发时,就会出现竞争、冲突问题,导致效率变慢。

是JDK1.7中新推出的基于的类,实现了每个线程拥有自己的类,避免了多线程时的冲突。

在JDK1.7版本以后,在任何场景都应该优先使用,它只有好处没有坏处。

使用debug日志时,避免不必要的函数调用

java中最有流行的日志框架当属Slf4j,其中就提供了debug方法来记录日志。debug 方法提供了占位符来避免在非debug日志等级时的字符串拼接。

.debug(” value: {}”, );

但是在某些使用错误的场景中,就会带来意想不到的资源浪费。比如调用了json.();

ini

复制代码

java pair

json = xxx;.debug(” value: {}”, json.());

这种使用方法会导致json.()会被调用,但是最后又不输出。使用.可以消除该问题。

ini

复制代码

json = xxx;if (.()) { .debug(” value: {}”, json.());}

停止使用JDK8

JDK8后续的LTS版本11中,包含了非常多的优化,比如类的优化,GC的优化等。所有的java应用都大量使用,在JDK8中,比较大而且慢。在JDK8中java pair,使用char

进行存储。

arduino

复制代码

value;

JDK9以后变成了byte

arduino

复制代码

value;

一系列存储和编码的优化减少了存储的大小和编码解码的速度。

java pair

java pair

总结

本文介绍了5种简单有效的java性能优化手段,以方便大家在工作写出更高效的程序

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » 5个优化java代码的性能的tips

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们