避免创建不必要的对象

1.通过延迟初始化对象提高性能 调用功能方法时调用静态工厂方法,而不是调用类时使用

2.适配器:把功能委托给一个后备对象,从而为后备对象提供一个接口的对象

3.自动装箱:优先使用基本类型而不是装箱的基本类型,要当心无意识的自动装箱

自动装箱类型每次使用的时候都会创建一个对象的实例,造成大量资源浪费

  1. ``long abSDate = System.currentTimeMillis();
  2. Long sumL = 0L;//每次调用参数sumL时都需要创建一个Long实例
  3. for (int i = 0; i < Integer.MAX_VALUE; i++) {
  4. //大约创建了2的31次方个实例
  5. sumL += i;
  6. }
  7. long abEDate = System.currentTimeMillis();
  8. System.out.print(sumL+",");
  9. System.out.println("使用Long自动装箱=4428?" + (abEDate-abSDate));
  10. long sDate = System.currentTimeMillis();
  11. long suml = 0L;
  12. for (int i = 0; i < Integer.MAX_VALUE; i++) {
  13. suml += i;
  14. }
  15. long eDate = System.currentTimeMillis();
  16. System.out.print(suml+",");
  17. System.out.println("使用long基本类型计算耗时= 918?" + (eDate - sDate ));

已经在上面标注了运行时间,可以看到不适用自动装箱同样的代码运行速度要快将近五倍

4.如果对象的构造器只做少量的显式工作,可以通过创建附加的对象,提升程序的清晰性,简洁性和功能性

EffectiveJava(5)避免创建不必要的对象的更多相关文章

  1. 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间

    [源码下载] 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间 作者:webabcd 介绍速战速决 之 PHP 动态地创 ...

  2. Java避免创建不必要的对象

    小Alan最近看到了<Effective Java>这本书,这本书包含的内容非常丰富,这本书我就不多介绍了,只能默默的说一句,作为一名java开发错过了这本书难免会成为一个小遗憾,所以还是 ...

  3. 用类方法------>快速创建一个autorelease的对象,在封装的类方法内部

    在封装的类方法内部,也就是+ (id)personWithName:(NSString *)name andAge:(int)age内部: 创建了一个person对象,并且创建了一个person*类型 ...

  4. Effective Java之避免创建不必要的对象

    Effective Java中有很多值得注意的技巧,今天我刚开始看这本书,看到这一章的时候,我发现自己以前并没有理解什么是不必要的对象,所以拿出来跟大家探讨一下,避免以后犯不必要的错误! 首先书中对不 ...

  5. String,你到底创建了几个对象????

    String str=new String("aaa"); 这行代码究竟创建了几个String对象呢?答案是2个,而不是3个.由于 new String("aaa&quo ...

  6. JavaScript DOM高级程序设计2.1创建可重用的对象--我要坚持到底!

    1.对象中包含什么 在javascript中,从函数到字符串实际上都是对象 继承 //创建一个person对象的实例 var penson={}; person.getName=function(){ ...

  7. 面试题之String str = new String("abc"); 创建了几个对象

    今天去面试的时候碰到了这个问题:String str = new String("abc"); 创建了几个对象,回来自己研究并查阅资料才发现答错了..网上的争论不少,有的说是两个, ...

  8. String s = new String("aa") 创建了几个对象?

    1 最近几个同学面试的时候出现了这样一个问题 刚听到这个题目的时候的确是不知所措: 经过网上的查找和自己的理解来解释一下这个题目的答案 答案是: 为什么呢??? 1 实现我们都知道创建实例有两种方法 ...

  9. java中String s = new String("abc")创建了几个对象?

    答案是两个,现在我们具体的说一下: String s = new String("abc");一.我们要明白两个概念,引用变量和对象,对象一般通过new在堆中创建,s只是一个引用变 ...

随机推荐

  1. HDU 1159 最长公共子序列(n*m)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  2. js中字符串常规操作

    string对象属性: 1.length 获取字符串的长度,需要注意的是,js中中文每个汉字也只代表一个字符. var myName="xulinjun"; console.log ...

  3. 部分浏览器上a标签包裹的dom元素显示不正常

    在苹果和部分安卓机上出现,pc端和chrome浏览器响应式设计里怎么样也不会出现的访问后a标签包裹的dom元素显示不正常a标签内的hr元素颜色显示不正常hr水平线的颜色被 bootstrap的css的 ...

  4. 阿里云Centos 7 FTP(vsftp)服务安装及配置

    #检查vsftpd是否安装 rpm -qa | grep vsftpd #检查vsftpd版本并安装 yum list vsftpd yum install vsftpd #设置开机启动 system ...

  5. 洛谷P2564 [SCOI2009]生日礼物

    题目背景 四川2009NOI省选 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可 ...

  6. sunos 修改shell为bash

    root:x:::Super-User:/:/sbin/sh 改为 root:x:::Super-User:/:/usr/bin/bash 修改/增加 .profile 文件,在¥HOME路径下 ex ...

  7. 从串口驱动的移植看linux2.6内核中的驱动模型 platform device & platform driver【转】

    转自:http://blog.csdn.net/bonnshore/article/details/7979705 写在前面的话: 博主新开了个人站点:你也可以在这里看到这篇文章,点击打开链接 本文是 ...

  8. Linux平台用C++实现事件对象,同步线程

    前文在Win32平台上用C++实现了事件对象Event,对线程进行同步,以达到期望目的.这次在Linux平台上实现与之类似的事件对象.与其相关的一组API包括:pthread_mutex_init,p ...

  9. 使用windos电脑模拟搭建集群(三)实现全网监控

    这里我们采用小米监控 open-falcon  这是server端就是 192.168.5.200 这台主机, agent就是负责将数据提交到 server端       agent整个集群所有主机都 ...

  10. 洛谷——P1614 爱与愁的心痛

    题目背景 (本道题目隐藏了两首歌名,找找看哪~~~) <爱与愁的故事第一弹·heartache>第一章 <我为歌狂>当中伍思凯神曲<舞月光>居然没赢给萨顶顶,爱与愁 ...