回复”666“获取公众号专属资料

来源:http://rrd.me/ew2m2

在对Java代码进行优化的时候,想方设法的要提高整体的效率,使用JProfiler看代码的时间占比,然后,看看哪些部分是可以优化的,减少运行时间的。下面有这么几个方向。

  1. 能使用构造函数一步到位的,就尽量使用构造函数,而不是使用一个个setter函数

  2. 能使用数组的,就使用数组。替代list,数组是真的快。

  3. for循环的时候,使用for i循环针对list接口的集合,不使用for each 循环。for i循环的时候,把length的值提到for循环之外。

  4. 有些变量能提出来的,取一次,多次使用。不要频繁的get。即使是一个简单的int值。

  5. 要是能使用内部类的话,可以使用内部类,这样可以省去getter,setter方法的使用。

  6. json的序列化和反序列化,不要说理论上是fastjson快,就使用fastjson,因为针对数据结构的简单复杂程度,来选择使用什么去序列化和反序列化,要实际测试之后,再说话。不能直接照搬理论,因为有时候Gson真的很快。

下面对这个构造和set的效率对比:

然后,使用的代码如下:

package com.lxk.fast;import com.google.common.collect.Lists;
import com.lxk.model.Car;
import com.lxk.model.Dog;/*** 测试谁快 直接构造或者一个个set,他们的效率差多少** @author LiXuekai on 2019/6/18*/
public class FastIsConstructOrSet {public static void main(String[] args) {testFast();}/*** 使用JProfiler看时间占比*/private static void testFast() {while (true) {//27.4%set();//72.6%construct();}}/*** 构造函数来给属性赋值*/private static void construct() {Car car = new Car("oooo", 100, Lists.newArrayList(new Dog("aaa", true, true)));}/*** set来给属性赋值*/private static void set() {Car car = new Car();car.setSign("oooo");car.setPrice(100);Dog dog = new Dog();dog.setName("aaa");dog.setAlive(true);dog.setLoyal(true);car.setMyDog(Lists.newArrayList(dog));}
}

可以发现,构造就是比一个个设置要快不少,所以,在能一步到位给属性设置值的时候,考虑到效率问题,就要这么干!

不是有老铁说builder模式吗?

我好奇就测试了一下,万一这个builder模式快呢。

下面是builder的代码:

    /*** 使用JProfiler看时间占比*/@Testpublic void testFast2() {while (true) {//33%set();//12.4%construct();//54.6%builder();}}/*** 使用lombok的 builder 模式来赋值*/private static void builder() {Car car = Car.builder().sign("0000").price(100).myDog(Lists.newArrayList(Dog.builder().name("aaa").alive(true).isLoyal(true).build())).build();}

使用的Lombok的注解。然后是JProfiler监测结果

结果

可以看到,还是构造函数牛x呀,还是他快,另外,上面的比例:72.6 : 27.4 = 33 :12.4 = 2.64。构造和set的时间比例是没有变化的。

想知道更多?描下面的二维码关注我


加技术群入口(备注:Tech):

免费星球入口:

免费资料入口:后台回复“666”

朕已阅 

Java代码优化:使用构造函数和使用一个setter的效率差别相关推荐

  1. java 调用其他构造函数_我如何在Java中调用另一个构造函数?

    是的,这是可能的: public class Foo { private int x; public Foo() { this(1); } public Foo(int x) { this.x = x ...

  2. Java Bean 为什么必须要有一个无参构造函数?

    JAVA EE 中,JavaBean 是一个很重要的概念,而 JavaBean 还有以下的使用习惯. 首先我们知道,有两种方法为java对象中的元素赋值: 1. 通过类的带参数构造函数的方法 2. 通 ...

  3. Java代码优化方案 J2ME内存优化

    从几本书上,N个网站上整理的一些JAVA代码优化方案,最近的项目只有1M内存可用,必须很抠门了~J2ME项目更要注意的 避免内存溢出 l 不用的对象释放(置空) 如 : a不为空时 a=new obj ...

  4. 开发者应该掌握的Java代码优化技能

    就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸鱼自然饱了. 代码优化一样,也许一个两个的优化,对于提升代码的运行效率意义不大,但是只要处处都能注意代码优化,总体来说对 ...

  5. JVM 虚拟机原理、Java 代码优化、秒杀系统

    JVM虚拟机原理 JVM组成架构 Java是一种跨平台的语言,JVM屏蔽了底层系统的不同,为Java字节码文件构造了一个统一的运行环境. Java 字节码文件 Java 如何实现在不同操作系统.不同硬 ...

  6. Java中的构造函数和重载

    一.Java中的构造函数 构造函数是对象被创建时初始化对象的成员方法,它具有和它所在的类完全一样的名字.构造函数只能有入口参数,没有返回类型,因为一个类的构造方法的返回类就是类本身.构造函数定义后,创 ...

  7. java的复制构造函数_什么是Java中的复制构造函数?

    通常,复制构造函数是通过使用先前已创建的相同类的对象初始化对象来创建对象的构造函数. Java支持复制构造函数,但与C语言不同,Java没有提供您需要自己定义的显式复制构造函数. 写一个拷贝构造函数 ...

  8. 普通的java类型是指,String是一个很普通的类 - Java那些事儿

    上一篇我们讲了Java中的数组,其实是为本章的内容做准备的,String这个类是我们在写Java代码中用得最多的一个类,没有之一,今天我们就讲讲它,我们打开String这个类的源码: 声明了一个cha ...

  9. Java网络编程(一)- 一个简单的服务端/客户端应用程序

    在Java中,我们使用java.net.Socket及其相关类来完成有关网络的相关功能.Socket类非常简单易用,因为Java技术隐藏了建立网络连接和通过连接发送数据的复杂过程.下面所说的内容只适用 ...

最新文章

  1. Microsoft Hyper-V Server 2012开启虚拟化-虚拟机管理
  2. php nuke是什么,Php Nuke For Donkeys
  3. 深度对抗学习在图像分割和超分辨率中的应用
  4. 【模型解读】GoogLeNet中的inception结构,你看懂了吗
  5. Swift语言快速入门
  6. 写MySQL存储过程实现动态执行SQL
  7. 一个配置web.xml的编程方法
  8. 给刚博士毕业的年轻学者9点建议,最后一条:抓紧结婚,生娃!
  9. 数字图像处理原理与实践:基于Visual C++开发
  10. CGAL Catmull-Clark Subdivide Surface
  11. 软件开发中常各类软件开发文档的英文缩写
  12. 新手十分钟玩转淘宝客推广攻略
  13. sql 闩锁 原因_关于SQL Server中的闩锁
  14. 全同态加密研究资源汇总
  15. 重磅!被称“新材料之王”“黑黄金”,中石化大丝束碳纤维投产,全球仅4家能产 | 美通社头条...
  16. 超分算法小合集之SRCNN、DCSCN、SRDenseNet、SRGAN
  17. 少儿编程培训发展的重要趋势
  18. [Delaunay Triangle] [图形学] Delaunay Triangles最易懂的实现方案
  19. 创建GitHub技术博客全攻略
  20. python打印pdf文件_Python静默打印PDF到特定的打印机

热门文章

  1. 自定义idea archetype
  2. 深入理解Kafka(2)-Producer
  3. log4j 2.x 架构
  4. STM32产品名称命名规则
  5. 深度学习原理与框架-卷积网络细节-数据增强策略 1.翻转 2.随机裁剪 3.平移 4.旋转角度...
  6. 磊哥评测之数据库:腾讯云MongoDB vs自建
  7. 导入Jquery.min.js时 JQuery 上打红X了
  8. js中的prototype的理解
  9. Android OpenGL ES(十)绘制三角形Triangle .
  10. Cisco 2960 交换机密码设置