`
yerk
  • 浏览: 21519 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

不可变的对象设计

阅读更多
为了提高代码质量,装上了ECLIPSEFINDBUGS插件。
查出个关于Integer对象生成的效率问题。
中 P Bx: invokes inefficient new Integer(int) constructor; use Integer.valueOf(int) instead

于是,顺便看看Integer.valueOf(int),做了什么优化。
public static Integer valueOf(int i) {
	final int offset = 128;
	if (i >= -128 && i <= 127) { // must cache 
	    return IntegerCache.cache[i + offset];
	}
        return new Integer(i);
}


private static class IntegerCache {
	private IntegerCache(){}

	static final Integer cache[] = new Integer[-(-128) + 127 + 1];

	static {
	    for(int i = 0; i < cache.length; i++)
		cache[i] = new Integer(i - 128);
	}
}


原来做了整数-128到127的缓存啊!!
由此想到在使用类似String,Integer...等不可变对象时,虽然避免了线程安全问题,但是还须注意性能的需求。

设计模式中的Flyweight(享元)模式可以用来解决上述问题!

按需创建不可变的对象,并缓存此对象。

3
1
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    多线程(23)不可变对象设计1

    【多线程(23)不可变对象设计1】这篇内容主要探讨了如何将一个可变对象转换为不可变对象,以解决并发环境中的资源竞争问题。不可变对象设计模式在Java编程中具有重要意义,特别是在多线程环境下,因为它们能确保对象...

    Java中不可变对象的构建与应用:深入指南

    在Java编程中,不可变对象是指一旦创建后其状态不能被修改的对象。这种对象模式在多线程环境和频繁对象创建的场景下,提供...在设计代码时,合理使用不可变对象可以提高代码的可读性和可维护性,减少潜在的错误和问题。

    详细分析Python可变对象和不可变对象

    理解可变对象和不可变对象的概念对于优化代码性能、避免意外修改和设计更安全的数据结构非常重要。在处理共享数据或并发操作时,应特别注意可变对象,因为它们可能导致难以预料的副作用。同时,合理选择可变或不可变...

    immutables,用于创建不可变对象和生成器的注释处理器。感觉像是番石榴的不可变集合,但对于常规值对象。包括json、jackson、gson、jax-rs、mongodb集成.zip

    Immutables是一个强大的Java库,专门用于创建不可变对象,并且提供了一个注解处理器来简化这一过程。在软件开发中,不可变对象是那些一旦创建就不能改变其状态的对象,这有助于提升程序的安全性、可预测性和并发性能...

    设计模式:可复用面向对象软件的基础(非扫描版+高清)

    它们是面向对象设计中的最佳实践,能够帮助开发者避免重复发明轮子,提高软件质量。 2. **面向对象编程基础** 在理解设计模式之前,需要掌握面向对象编程的基本概念,如类、对象、封装、继承和多态。C++作为支持...

    Java中的String对象是不可变的吗Java开发Jav

    在Java编程语言中,String对象被认为是不可变的。这个特性是Java设计者为了优化性能、安全性和线程安全性而有意设定的。理解String对象的不可变性对于Java开发者来说至关重要,因为它影响着代码的编写、内存管理和多...

    设计模式可复用面向对象软件的基础 源码

    "设计模式可复用面向对象软件的基础"这一主题强调了设计模式在创建可维护、可扩展的面向对象软件中的核心作用。源码实现则为我们提供了实际应用这些模式的实例,帮助我们更好地理解和掌握它们。 在《设计模式:可...

    设计模式:可复用面向对象软件的基础--详细书签版

     本书结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别...

    设计模式可复用面向对象软件的基础(c++).pdf

    《设计模式可复用面向对象软件的基础》一书是面向对象设计领域的重要著作,它聚焦于如何构建可复用的面向对象软件,特别是针对C++语言环境下的设计模式进行了深入探讨。全书精选了23种设计模式,旨在为读者提供一...

    设计模式:可复用面向对象软件的基础.zip

    这些模式经过时间的考验,被广泛应用于各种面向对象的软件开发中,以提高代码的可读性、可维护性和可复用性。本教程旨在深入讲解设计模式的基本原理和应用方法,帮助开发者构建更加健壮和灵活的软件系统。 首先,...

    UML面向对象设计基础

    通过UML,不同的开发团队和组织能够以一致的方式来交流和协作,这对于提高软件开发效率和质量有着不可估量的价值。 #### 结语 《UML面向对象设计基础》是面向对象技术领域的一本经典入门书籍。它通过系统地介绍面向...

    seamlessimmutable不可变JS数据结构向后兼容常规数组和对象

    Seamless Immutable是一款JavaScript库,它提供了一种创建不可变数据结构的方式,这些结构与JavaScript中的常规数组和对象保持向后兼容。不可变数据结构在编程中尤其在React和其他函数式编程库中变得越来越重要,...

    C#面向对象设计模式纵横谈 12种设计模式

    以上12种设计模式构成了C#面向对象设计的基础框架,理解和熟练运用这些模式可以极大地提升代码的可读性、可维护性和复用性,帮助开发者编写出更加优雅的软件系统。通过阅读《C#面向对象设计模式纵横谈》一书,你将...

    设计模式,可复用对象基础

    本书假设你至少已经比较熟悉一种面向对象编程语言,并且有一定的面向对象设计经验。当我们提及“类型”和“多态”,或“接口”继承与“实现”继承的关系时,你应该对这些概念了然于胸,而不必迫不及待地翻阅手头的...

    面向对象设计原则.ppt

    面向对象设计原则更关注如何在设计阶段就考虑到系统的可变性和扩展性。例如,对于计算员工工资的问题,传统的结构化做法可能会导致大量重复代码,而采用面向对象设计,我们可以通过创建不同的员工类并让它们继承自...

    《设计模式:可复用面向对象软件的基础》英文版

    ### 设计模式:可复用面向对象软件的基础 ...总之,《设计模式:可复用面向对象软件的基础》不仅是一本技术手册,更是面向对象设计领域的里程碑之作,对于提高软件开发者的设计思维能力和实践技能具有重要的指导意义。

    面向对象设计理论

    面向对象设计理论是软件开发领域中的核心概念,它是一种基于现实世界中对象和它们之间交互的编程模型。这种设计方法论极大地提高了代码的可维护性、可扩展性和重用性。下面将详细阐述面向对象设计的基本概念、原则...

Global site tag (gtag.js) - Google Analytics