| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> JAVA程序性能优化 - 循环内集合处理优化2 -> 正文阅读 |
|
[数据结构与算法]JAVA程序性能优化 - 循环内集合处理优化2 |
接上述文章,这里继续探讨下循环内集合使用怎么优化 先看下原代码:
上述代码,很容易的就能看出来问题,循环体内初始化,在资源优先的情况下,必然会内存溢出,并且初始化过程本省也是会消耗性能的。我们先看下执行结果(我这里堆内存设置的为300m): 不出意外的OOM了。 优化思路:提取循环内的初始化,再使用完map之后清理map数据。 对于清理map数据得方式有很多种,一个是根据key值remove,第二个直接clear。那我们再来看下打这两者效率对比。 (1)使用remove 清理map数据
结果:可以看出来已经解决了OOM问题了? ---执行时间:~350ms ?(2) 使用clear清理map
?结果:可以看到相同数据量的情况下,clear效率会比remove更好一点的 -- 执行时间:~300ms。 分析过程: remove源码:可以容易看出来,remove是通过先找到key的节点然后进行删除操作,如果再key比较复杂的情况下,该方式就很耗性能了。 ?clear源码:这个就是直接根据列表长度将列表进行删除了,不关心树节点的操作。 ?综合对比:
结论: ? ? ? 1、提出循环体内初始化,可以明显的提交性能。 ? ? ? 2、再map的key数量较少时,clear和remove方式性能相差不大,但clear等优。 ? ? ? 3、数据量很大或者不知时,都推荐使用clear。 ? ? ? 4、如果循环后续有其他相关业务时,再完成list集合或者对象使用之后,手动清除list=null,? 因为list的生命周期随方法的结束,如果后续逻辑复杂,list会持续占用内存。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:26:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |