一个程序功能的运行与执行,快与慢,客户的体验是否良好,除了感知页面的体验外,一直以来,效率方面也显得特别重要,想要获得大量的流量,客户的体验感是非常重要的,其实在软件上做的很多东西,基本面向的都是我们大众的客户,客户是上帝,想要提供最好的服务,除了追求质量外,效率也是我们一直追求的理想,下面整理一些java代码的优化,除了个人的总结接触外,当然也借鉴了一些网上的文章来整理的,学习的,可能还有很多没有整理到的内容,所以此文章的优化整理会持续添加在后面,持续更新,敬请关注:
优化目标:一,减少代码量(通俗来讲);二,提高运行效率(最终结果)
下面的优化点,一点点来概括列出:
1,ArrayList适用于查询(数据结构,查询时不必移动指针),LinkedList(链表结构,只需要引用对象即可)适用于增删操作,请看前面文章介绍:https://blog.csdn.net/Kinglon17/article/details/86570098
2,尽量使用HashMap,ArrayList(基于效率和类型,应尽可能使用array,但是无法确定数组大小的情况时使用ArrayList),StringBuilder(字符串连接时使用,不要用String对象,避免JVM又花时间去生成对象和垃圾回收),使用这三者:Hashtable、Vector、StringBuffer会因为同步机制的原因导致性能开销,但可用于非线程安全
3,尽量指定类和方法的final修饰符,final修饰不允许继承和重写,编译器内联查找全部final修饰的方法,提升运行效率
4,避免随意使用静态变量static,gc通常不回收此修饰对象的内存,直到程序终止
5,数组切勿声明为public static final,数组内容可改变,声明毫无意义,且声明为公共类,外部类可改变引用,存在安全漏洞
6,常量声明为static final,以大写命名,放入常量池中,避免运行期间生成常量值,也方便区分出常量与变量
7,尽量重用对象(减少内存占用),尽量使用局部变量(临时变量存在栈中,速度快,堆中,速度慢),减少变量的重复计算(减少消耗),使用懒加载模式(需要用时才创建),及时关闭流和会话(释放资源),使用缓冲流进行IO操作(提高IO效率)
8,对于异常,循环中不用try catch,直接放外层,慎用异常(对性能不利,会创建对象,jvm调整堆栈),异常内的多个close()操作,建议分开异常try catch close()操作,避免其他colse操作为得以关闭,未来得及回收,就已经抛了异常
9,乘法和除法改用移位操作(提高性能,不利于阅读),循环内忌创建对象引用,当复制大量数据时,使用System.arraycopy()命令
10,单例模式的适合使用场景:线程同步控制资源并发访问,控制创建实例,不相关的进程间的数据共享
11,使用同步代码块替代同步方法(略过不需要执行的代码),public方法多参数的情况直接用实体封装形参
12,使用数据库连接池和线程池(重用对象,避免频繁操作打开与创建等操作)
13,常量与字符比较,常量写前面(避免空指针)如:“10”.equals(a)
14,序列化实体类中加入实体的toString方法,方便调试测试数据,map遍历的最有效率方法,推荐使用keyset或者entrySet+Iterator来遍历
15,删除无用类与无用对象,公共集合类不使用的数据,及时remove(不断增大,有内存溢出隐患),减少反射的使用(可在加载类中实例化对象,存入内存再使用)
16,转字符串的三种方式效率(从快到慢): Integer.toString()(直接调用) - > String.valueOf() (调用了底层 Integer.toString() 方法并做空判断) - > i+""(先拼接,再toString())
17,一般运行时异常(RuntimeException)处理方法:
ArithmeticException---通过判断除数是否为空; NullPointerException---通过判断对象是否为空;
IndexOutOfBoundsException---通过判断数组/字符串长度; ClassCastException---通过instanceof关键字;
ConcurrentModificationException---有人说用迭代器处理,但是好像也会异常,看情况,个人建议用普通for循环处理;
18,获取随机数,可用JDK7版本后的ThreadLocalRandom,避免Random实例被多线程使用(线程安全),因竞争同一seed 导致的性能下降
19,静态类、单例类、工厂类将它们的构造函数置为private(不需要外部将它们new出来的情况下,保证了这些类不会产生实例对象)
MyBatis 的基本用法MyBatis 级联查询MyBatis的逆向工程MyBatis 框架需要:实体类、自定义 Mapper 接口、Mapper.xml传统的开发中上述的三个组件需要开发者手动创建,逆向工程可以帮助开发者来自动创建三个组件,减轻开发者的工作量,提高工作效率。1、新建 Maven 工程,pom.xml<dependencies> <dependency> <groupId>org.mybatis<
来源:http://www.tuicool.com/articles/7JbmYr我们在编写shell脚本的时候,经常需要和 mysql 交互.如果是交互环境,可能使用这样的命令登录到mysql#mysql –uroot –p#mysql –uroot –p 然后按提示输入密码, 登录. 如果在脚本中, 我们就不得不把
同一个局域网内如何共享文件要想设置同一个局域网内共享文件,那该怎么办呢?下面由小编给你做出详细的同一个局域网内共享文件方法介绍!希望对你有帮助!同一个局域网内共享文件方法一打开我的电脑,点菜单栏上的工具,下拉,点击文件夹选项,查看中,在使用简单文件共享(推荐)]这项前面打上勾。开始-运行-gpedit.msc-计算机配置-WINDOWS设置-安全设置-本地策略-用户权限指派-双击“拒绝从网络访问这...
API与C#的数据类型对应关系表 自己java对着定义就行了 API数据类型类型描述C#类型API数据类型类型描述C#类型WORD16位无符号整数ushortCHAR字符charLONG32位无符号整数intDWORDLONG64位长整数longDWORD32位无符号
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/54934782 本文出自:【余志强的博客】Tinker初体验先到Github上下载Tinker源码,里面包含了tinker-sample-android,使用AndroidStudio导入该例子工程即可。导入工程后,运行程序 ,出现...
B站网页视频加速设置在2020年8月份,检测有效打开所在b站网页,按下F12,出现调试窗口。选中console,输入以下这行代码,12就是12倍速,一般2–3倍速比较适合观看,再高就不是一般人可以适应的了。document.querySelector('video').playbackRate = 12;...
1gdal_merge.py: 合并(Merge)/镶嵌(Mosaic)工具。要求图像必须是相同坐标系统、具有相同的波段数;可以不同分辨率,可以有重叠区域(后加入图像覆盖先加入的图像)。注意:只能使用nearest重采样方法。gdal_merge.py [-o out_filename] [-of out_format] [-co NAME=VALUE]*...
文章目录一、kettle概述二、kettle安装部署和使用Windows下安装案例1:MySQL to MySQL案例2:使用作业执行上述转换,并且额外在表stu2中添加一条数据案例3:将hive表的数据输出到hdfs案例4:读取hdfs文件并将sal大于1000的数据保存到hbase中三、创建资源库1、数据库资源库2、文件资源库四、 Linux下安装使用1、单机2、 集群模式案例:读取hive中的emp表,根据id进行排序,并将结果输出到hdfs上五、调优一、kettle概述1、什么是kettleK
习题2-1 求整数均值 (10 分)本题要求编写程序,计算4个整数的和与平均值。题目保证输入与输出均在整型范围内。输入格式:输入在一行中给出4个整数,其间以空格分隔。输出格式:在一行中按照格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位。输入样例:1 2 3 4输出样例:Sum = 10; Average = 2.5#include<stdio.h>#include<stdlib.h>int main()
Winform控件ListBox的用法: 1、如何添加listbox的值:this.listboxname.item.add("xxxx");2、如何判断listbox是否已经添加过:if(this.listboxname.item.Contain("xxxx")){MessageBox.show("已添加过此条信息");}else{//*****}3、获取listbox控件的值:i
文章目录6.1. scrapy-redis的官方文档源码分析参考:Connection6.1. scrapy-redis的官方文档源码分析参考:Connection官方站点:https://github.com/rolando/scrapy-redisscrapy-redis的官方文档写的比较简洁,没有提及其运行原理,所以如果想全面的理解分布式爬虫的运行原理,还是得看scrapy-redi...
PdfBox读取PDF加载pdf文件出错下载相关Jar包(pdfbox和fontbox为主)网址http://pdfbox.apache.org/download.cgi准备pdf格式文件(代码创建)package com.unify.service;import org.apache.pdfbox.pdmodel.PDDocument;...