重复使用同一个对象,而不是每次需要时就创建一个功能上等价的对象
String s = new String("silly");
每次执行的时候创建一个新的String实例,但没有一个是真正需要的的,如果在for中将有很多对象被创建出来
String s ="silly"只创建一个对象
构造函数每次调用时总是创建一个新的实例,而静态工厂方法不要求这样做
public class Person {
private final Date birthData;
public Person(Date birthDate) {
this.birthData = birthDate;
}
// 每次被调用是Calendar、TimeZone都要创建一次,date2次,
// 所以不要用这个方法
public boolean isBabyBoorer() {
Calendar gmtCalendar = Calendar
.getInstance(TimeZone.getTimeZone("GMT"));
gmtCalendar.set(1946, Calendar.JANUARY, 1, 0, 0, 0);
Date boomStart = gmtCalendar.getTime();
gmtCalendar.set(1965, Calendar.JANUARY, 1, 0, 0, 0);
Date boomEnd = gmtCalendar.getTime();
return birthData.compareTo(boomStart) >= 0
&& birthData.compareTo(boomEnd) < 0;
}
}
------------------------------------------------------------------------------------------------
/**
* 在初始化时创建一次Calendar、TimeZone都要创建一次,date2次,
* ,而不是每次调用时创建,提高性能
*
* @author dzl
*
*/
class Person2 {
private final Date birthData;
public Person2(Date birthDate) {
this.birthData = birthDate;
}
private static final Date BOOM_START;
private static final Date BOOM_END;
static {
Calendar gmtCalendar = Calendar
.getInstance(TimeZone.getTimeZone("GMT"));
gmtCalendar.set(1946, Calendar.JANUARY, 1, 0, 0, 0);
BOOM_START = gmtCalendar.getTime();
gmtCalendar.set(1965, Calendar.JANUARY, 1, 0, 0, 0);
BOOM_END = gmtCalendar.getTime();
}
public boolean isBabyBoorer() {
return birthData.compareTo(BOOM_START) >= 0
&& birthData.compareTo(BOOM_END) < 0;
}
}
当然,小对象的构造和回收是非常廉价的,特别是现代的JVM强大的功能超过自己维护对象池的性能。在提倡使用保护性拷贝的场合,重用一个对象招致的代价大于重复创建对象而招致的代价。所以如何使用要斟酌。
分享到:
相关推荐
最后,避免创建重复对象是提高效率的关键。通过重用对象而非频繁创建新的对象,可以减少内存分配和垃圾回收的开销。例如,字符串常量池就利用了这一原则,对相同内容的字符串只创建一个实例。在编写代码时,应尽量...
总的来说,"易语言创建互斥对象禁止重复运行模块"是通过利用互斥对象这一系统级别的同步机制,保证了程序在单个系统实例中的唯一性,避免了不必要的资源浪费和潜在的冲突问题。这样的模块对于需要防止多实例运行的...
- **避免创建重复对象**:消除对过期对象的引用,一旦对象不再需要,应立即清除资源和引用,防止内存泄漏。 2. **对象定义** - **equals方法的重载**:当类需要实现逻辑等价测试时,应重载equals方法,确保与...
通过检查`prototype`是否已经包含某个方法,避免重复创建。 5.6 混合工厂方法 这种混合方法通常不推荐,因为它在内存管理上与传统的工厂方法和构造函数有相同的问题,可能会导致不必要的内存消耗。 6. 修改对象 ...
标题提到的"创建互斥对象禁止软件重复运行易语言模块源码"是解决一个特定问题的技术手段,即防止同一款软件在同一台计算机上多次开启,也就是所谓的“软件多开”。这种方式常用于单实例应用的实现,例如某些财务软件...
当一个程序已经启动并创建了互斥对象,其他试图启动的程序实例会检查这个互斥对象是否存在,如果存在,说明已经有其他实例在运行,新的尝试将会被阻止,从而避免了程序的重复运行。 源码中的"K5C5CN47.e"文件很可能...
这种方式的优点在于节省内存,因为它避免了为每个对象实例创建重复的方法。但是,原型模式同样存在缺陷,主要是共享了对象方法和属性的修改,一个实例对原型对象的修改会影响到所有实例。 4. 构造函数和原型模式的...
这个压缩包文件"创建互斥对象禁止软件重复运行易语言模块源码-易语言.zip"(实际上是一个rar文件)提供了一个易语言(EasyLanguage)编写的模块,用于实现互斥对象的概念,从而防止同一软件的多个实例在同一台计算机...
并发垃圾处理器在Android 2.3中引入,但是总是应该避免不必要的工作,因此应该在不必要的时候避免创建对象实例。 在编程开发中,内存的占用是我们经常要面对的现实,通常的内存调优的方向就是尽量减少内存的占用。 ...
这种方式下,无论创建多少次相同的字符串字面量,JVM 只会在 **常量池** 中创建一个实际的对象,从而避免重复创建相同的对象,节省内存空间。示例如下: ```java String s1 = "abc"; String s2 = "abc"; System.out...
而在`Photos`框架下,需要创建一个`PHAssetChangeRequest`对象,然后通过`requestCreationRequestForVideo`或`requestCreationRequestForAssetFromImage`方法来创建新的资产。 5. **处理回调**:无论是`ALAssets`...
2. **创建托盘通知区域对象**:在`CWinApp`的`InitInstance()`方法中,创建一个`C TrayIcon`对象(通常是`CNotifyIcon`类的实例),并将其与应用的主窗口关联起来。通过调用`SetIcon()`设置托盘图标,`SetTooltip()`...
1. 使用局部变量重用:在循环或其他重复逻辑中,如果对象只在有限范围内使用,可以将创建的实例保存在局部变量中,避免反复创建。 2. 避免不必要的`new`操作:如果可能,尽量使用已存在的对象,比如使用`...
String 对象池可以提高效率,因为它可以避免创建重复的 String 对象。 String 对象池是由 String 类维护的,可以通过 intern() 方法来访问字符串池。 三、String 对象池的机制 当我们创建一个 String 对象时,...
这种模式的优点是可以避免代码重复,但缺点是无法明确知道对象的类型。 2. **构造函数模式**: 构造函数模式用于创建具有相似属性和方法的对象。通过`new`关键字调用构造函数,可以在`this`上下文中创建新的对象...
原型模式主要用于简化实例化过程,通过复制已有对象来创建新对象,而不是直接通过构造函数来创建。这一模式的核心思想在于,类的实例化可以通过克隆已存在的实例完成,减少了代码重复,提高了效率。 ### 1. 原型...
在这种情况下,创建互斥对象(Mutex)是一种常用的技术,它可以防止软件的重复运行。这个主题与"易语言"相关,易语言是一种中国本土开发的编程语言,以其简单易学的特性深受初学者喜爱。 "创建互斥对象禁止软件重复...
在需要创建大量相似对象时非常有用,它可以避免重复创建对象,从而提高性能,并且可以根据需要实现浅拷贝或深拷贝。 在 Java 中,原型模式的实现通常涉及到实现 Cloneable 接口和重写 clone() 方法。 Cloneable ...
但是工厂模式会创建出许多重复代码,且无法识别对象的具体类型。为了克服这个问题,JavaScript还提供了构造函数模式,它使用new关键字来创建对象,并且构造函数中的this会指向新创建的对象实例。 构造函数模式虽然...
- 可以利用原型链来共享属性和方法,避免了每个对象都要定义相同的属性和方法的问题。 - **缺点**: - 如果构造函数中有大量非静态的方法定义,则每个实例都会拥有这些方法的独立副本,这会消耗更多的内存。 - ...