`
bingooh
  • 浏览: 53278 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

2.5 避免创建不必要的对象

 
阅读更多

1.避免使用new String("hello")创建不必要的字符串对象(在Java里,字符串实现为常量,以上方式将创建不必要的字符串对象)。以下测试:

	private String temp;
	
	@BeforeClass
	public void init(){
		//初始化创建hello字符串对象,避免影响后面测试
		this.temp="hello";
	}
	
	@Test
	public void testStringOne(){
		for(int i=0;i<10000;i++){
			String s="hello";
			System.out.println(s);
		}	
	}	
	
	@Test
	public void testStringTwo(){
		for(int i=0;i<10000;i++){
			String s=new String("hello");
			System.out.println(s);
		}
	}	

 

测试结果如下:

注意:理论上testStringTwo ()因为创建了不必要的String对象,消耗的时间应更多。实际上 却相反,原因不知

 

2.避免使用自动封装。以下测试里,第一个测试方法变量sum为Long类型,在计算时,会自动转换为long,计算完成后再转换为Long,影响性能。推荐优先使用基本数据类型

	@Test
	public void testLongOne(){
		Long sum=0l;
		for(long i=0;i<10000000;i++)
			sum+=i;
		
		System.out.println(sum);
	}

	@Test
	public void testLongTwo(){
		long sum=0l;
		for(long i=0;i<10000000;i++)
			sum+=i;
		
		System.out.println(sum);
	}

 

测试结果:

 

 

3.避免创建多个只读对象,可结合使用静态工厂方法返回只读对象

    public static Boolean valueOf(boolean b) {
        return b ? Boolean.TRUE : Boolean.FALSE;
    }

 

此外,java.util.Map的keySet()方法总是返回同一个Set对象,修改此Set包含的key值将影响对应的Map对象,反之亦然。尽管如此,一般情况都不会修改返回的Set对象。使用此方式也可以避免创建额外的对象。

 

可以在静态代码块里初始化只读对象,也可以在第一次调用对象方法时初始化只读对象。但是后者需要考虑多线程访问的情况

  • 大小: 1.8 KB
  • 大小: 1.8 KB
分享到:
评论

相关推荐

    .net性能优化宝典

    1.1.1 避免不必要的对象创建... 4 1.1.2 不要使用空析构函数 ★... 4 1.1.3 实现 IDisposable 接口... 4 1.2 String 操作... 5 1.2.1 使用 StringBuilder 做字符串连接... 5 1.2.2 避免不必要的调用 ToUpper 或...

    SQL Server 2008数据库设计与实现

     4.1.2 避免编写不必要的代码  4.1.3 给表瘦身  4.1.4 最大化聚集索引的使用  4.1.5 降低每张表中索引的数量  4.2 规范化应该走多远  4.3 规范化过程  4.4 实体和属性的形式:第一范式  4.4.1 所有...

    亮剑.NET深入体验与实战精要2

    15.3.2 避免不必要的回送操作 541 15.3.3 尽量在客户端进行用户输入验证 541 15.3.4 关闭不必要的Session状态 542 15.3.5 优先使用HTML控件,而非服务器控件 542 15.3.6 不必要时关闭ViewState 542 15.3.7 禁用调试...

    亮剑.NET深入体验与实战精要3

    15.3.2 避免不必要的回送操作 541 15.3.3 尽量在客户端进行用户输入验证 541 15.3.4 关闭不必要的Session状态 542 15.3.5 优先使用HTML控件,而非服务器控件 542 15.3.6 不必要时关闭ViewState 542 15.3.7 禁用调试...

    ASP.NET Night Words

    21.1.5 避免不必要的服务器往返 414 21.1.6 尽早释放对象 415 21.1.7 尽量减少服务器控件的使用 415 21.2 数据操作优化 415 21.2.1 数据库连接对象使用优化 415 21.2.2 数据访问优化 416 21.2.3 优化sql语句 ...

    SQL注入攻击与防御(安全技术经典译丛)

     9.4.1 最小化不必要信息的泄露  9.4.2 提高Web服务器日志的冗余  9.4.3 在独立主机上部署Web服务器和数据库服务器  9.4.4 配置网络访问控制  9.5 本章小结  9.6 快速解决方案  9.7 常见问题解答 第10...

    科大讯飞的语音合成

    注意:请把不必要的路径删除。例如更新了SDK后,新的SDK与旧的SDK不在同一路径,请把旧的路径删除,避免引用到旧的库。对应集成SDK后发现编译失败,提示找不到头文件,请先检查这个路径是否正确。 2.5 导入头文件 ...

    SQLServer2008查询性能优化 2/2

    2.9.6 不运行不必要的软件 45 2.10 网络瓶颈分析 45 2.10.1 Bytes Total/sec 45 2.10.2 % Net Utilization 46 2.11 网络瓶颈解决方案 46 2.11.1 优化应用程序工作负载 46 2.11.2 增加网络适配器 47 2.11.3 ...

    SQLServer2008查询性能优化 1/2

    2.9.6 不运行不必要的软件 45 2.10 网络瓶颈分析 45 2.10.1 Bytes Total/sec 45 2.10.2 % Net Utilization 46 2.11 网络瓶颈解决方案 46 2.11.1 优化应用程序工作负载 46 2.11.2 增加网络适配器 47 2.11.3 ...

    SQL注入攻击与防御

    9.4.1 最小化不必要信息的泄露 317 9.4.2 提高Web服务器日志的冗余 320 9.4.3 在独立主机上部署Web服务器和数据库服务器 320 9.4.4 配置网络访问控制 321 9.5 本章小结 321 9.6 快速解决方案 321 9.7 常见问题解答 ...

    C++MFC教程

    |------ 2.5 使用各种映射方式 |------ 2.6 多边形和剪贴区域 +-- 第三章 文档视结构 |------ 3.1 文档 视图 框架窗口间的关系和消息传送规律 |------ 3.2 接收用户输入 |------ 3.3 使用菜单 |------ 3.4 文档,视...

    DWR.xml配置文件说明书(含源码)

    所以应该要避免这种情况的发生. 一种情况是因为解析器是一个语法宽松的解析器,他不象编译器一样对语法有非常严格的要求,所有有时可能一些重要的语句没有配置而无法事先发现. &lt;![CDATA[ import java.util.List; ...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    8.5.1 避免不必要的复制操作 389 8.5.2 应用rvalue引用形参 392 8.5.3 命名的对象是lvalue 394 8.6 类模板 399 8.6.1 定义类模板 400 8.6.2 根据类模板创建对象 402 8.6.3 使用有多个形参的类模板 405 8.6.4...

    正则表达式经典实例.pdf

    2.14 消除不必要的回溯 2.15 避免重复逃逸 2.16 检查一个匹配,但不添加到整体匹配中 2.17 根据条件匹配两者之一 2.18 向正则表达式中添加注释 2.19 在替代文本中添加字面文本 2.20 在替代文本中添加正则匹配 2.21 ...

    正则表达式经典实例

    2.14 消除不必要的回溯 2.15 避免重复逃逸 2.16 检查一个匹配,但不添加到整体匹配中 2.17 根据条件匹配两者之一 2.18 向正则表达式中添加注释 2.19 在替代文本中添加字面文本 2.20 在替代文本中添加正则匹配 ...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    2.5 SGA-缓冲区缓存 32 2.6 查询转换 35 2.7 视图合并 36 2.8 子查询解嵌套 39 2.9 谓语前推 42 2.10 使用物化视图进行查询重写 44 2.11 确定执行计划 46 2.12 执行计划并取得数据行 50 2.13 SQL执行——总...

    自己动手写操作系统(含源代码).part2

    读者可以根据路线图逐步完成各部分的功能,从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感。书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不仅能使读者更深刻地认识操作系统的核心原理...

    自己动手写操作系统(含源代码).part1

    读者可以根据路线图逐步完成各部分的功能,从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感。书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不仅能使读者更深刻地认识操作系统的核心原理...

Global site tag (gtag.js) - Google Analytics