接着上篇文章的分析的结果,在业务需求下这种循环内创建集合对象的使用,优化空间几乎没有了,因为循环内创建map对象,申请空间是避免不了的。所以没有必要将优化目标放到这了。

 public static void outsideLoop() {List<Map> list = new ArrayList<>();int i = 0;while (++i < 10000000){Map<String,Object> map =  new HashMap<>();map.put("key0","values");map.put("key1","values");map.put("key2","values");map.put("key3","values");list.add(map);}// ------- 后续省略其他操作 ------System.out.println("操作结束,完成数据量:"+list.size());}

那这些场景的方法还能有哪些优化空间呢?

1、循环创建对象可以考虑clone

      在循环内创建对象,还有种方案可以考虑clone的方式去申请空间,好处就是它通过克隆已有的对象属性(暂不细说深克隆、浅克隆),不需要调用构造方法,而new需要通过构造方法进行赋值。

但是并不是说clone的效率就一定比new的效率高,对于重量级的对象(属性多复杂)可以考虑使用clone的方式,这是相对于new的方式,其效率会更好一点,如果对应简单的对象new可能会更加快一点。因为两者都是需要申请对象空间的,所以内存上基本上没有什么差异,所以根据实际情况来选择使用。

2、方法内对象的合理使用,手动置null等待GC回收。

解释:在复杂的方法内部,可能存在很多对象的创建,但是因为方法未结束,导致这些对象生命周期未结束所以迟迟不能被GC,而占用内存空间,举例:上述代码种如果list集合在完成业务之后,可能后续还有其他很多操作,且使用不到list,此时就可以手动的去置空list对象,等待GC回收

 public static void outsideLoop() {List<Map> list = new ArrayList<>();int i = 0;while (++i < 10000000){Map<String,Object> map =  new HashMap<>();map.put("key0","values");map.put("key1","values");map.put("key2","values");map.put("key3","values");list.add(map);}System.out.println("操作结束,完成数据量:"+list.size());list = null;// ------- 后续省略其他操作 ------}

3、对于集合对象的创建,可以预先设置集合大小,尽量减少集合在使用过程中频繁执行扩容操作。

可以根据集合的扩容机制去初始化集合的容量,减少扩容过程,来达到提高执行效率的目的,当然了并不是盲目的初始化都可以提高效率的,简单说下因为初始化大容量后会申请空间,如果循环创建的对象大时,毫无疑问会增大GC的频率和时间,这时反而效率会降低。

JAVA程序性能优化研究 - 循环内对象性能优化内容相关推荐

  1. for循环次数太多的时间优化_for循环关于对象长度优化思考

    一.for循环对象长度两种写法 最近看到很多代码,各种语言,在写for循环的时候并没有把长度提取出来,而是每次遍历的时候进行计算. $str = 'bye 2019, hi 2020!'; for ( ...

  2. 2020年薪30W的Java程序员都要求熟悉JVM与性能调优!

    前言 作为Java程序员,你有没有被JVM伤害过?面试的时候是否碰到过对JVM的灵魂拷问? 一.JVM 内存区域划分 1.程序计数器(线程私有) 程序计数器(Program Counter Regis ...

  3. java程序员如何在短期内抓住面试重点,成为大厂offer收割机

       java学习 成长思维导图:骆驼祥子思维导图 - GitMind 前言: 你也许能说出一万个不知道原理源码也能胜任工作的理由.但是也改变不了,高质量的人才必须要通过原理源码来筛选的事实! 不要抱 ...

  4. 用java程序for循环打印菱形_编写Java程序,应用for循环打印菱形、三角形

    //输出三角形//右上 for(int m = 1; m <= 10; m++) {for (int n = 1; n <= m; n++) { System.out.print(&quo ...

  5. java用for语句实现菱形_编写Java程序,应用for循环打印菱形、三角形

    //输出三角形//左下 for(int m = 1; m <= 10; m++) {for (int n = 1; n <= m; n++) { System.out.print(&quo ...

  6. PostgreSQL 打开文件句柄优化 - 百万以上实体对象初始化优化

    标签 PostgreSQL , ulimit , nofile , fs.nr_open , setrlimit 背景 数据库是一种非常庞大的应用系统,就拿PostgreSQL来说,每个实体对象(物化 ...

  7. Java程序性能优化 !

    一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...

  8. java程序性能优化(实例)

    java程序性能优化(实例) 一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: i ...

  9. 【转】Java程序性能优化

    一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...

  10. Java程序性能优化 ! .

    雁过请留声哦!一起学习讨论... 一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: ...

最新文章

  1. 计算机的安全问题中保密是指,计算机安全保密练习册答案.doc
  2. java知识点8——垃圾回收原理和算法、通用的分代垃圾回收机制、 JVM调优和Full GC、开发中容易造成内存泄露的操作
  3. net start mysql 发生系统错误 5。 拒绝访问。的解决方法
  4. 三大性质总结:原子性,有序性,可见性
  5. 大数据_Spark_框架简介---Spark工作笔记0001
  6. 网页读不出php语句,php - phpmyadmin显示代码而不是网页 - 堆栈内存溢出
  7. 南邮CTF--bypass again
  8. docker 网络配置_Kafka的AWS Docker网络设置
  9. linux 代码编辑器软件下载,Visual Studio Code下载
  10. win10 专业版 explorer.exe下载 (完全Free)
  11. 如何登录锐捷设备(业务软件篇)
  12. 计算机视觉论文-2021-07-21
  13. 一键部署k8s集群(三节点)
  14. 做了个护盾出来 哈哈
  15. GitHub好玩的项目之你想要的样子 我都有
  16. 抖音话题怎么选热门?为什么要做抖音话题
  17. 建立时间和保持时间概念
  18. 韩国要对机器人征税,因为它们取代了人类工作
  19. 怎样删除软件残留在添加或删除程序中的信息?
  20. 老妻少夫:性福美满,享受醉生梦死的极乐

热门文章

  1. QML 自定义鼠标光标
  2. Qt TextEdit 不自动换行 取消换行
  3. 金蝶记账王和易记账哪个好_代理记账比招聘全职会计好在哪-义乌丹诚代理记账...
  4. 程序阻碍OD调试的方式2
  5. windows程序设计基础知识
  6. Oracle 11g RAC 安装数据库软件找不到节点的解决
  7. 使用Eclipse开发Android应用程序
  8. iocomp入门教程-以MFC中iplotx为例
  9. java 反编译 exe_Java反编译
  10. 《暗黑3》是如何设计随机地下城的?