避免创建不必要的对象和避免使用终结方法

避免创建不必要的对象

1. String s = "123";

而不用String s = new String("123");

因为JVM中会有一个常量池,可以保存字符串常量,直接使用"123"可以直接从常量池中返回对象,而不会重新创建新对象

更加详细的说明:http://jiangzhengjun.iteye.com/blog/577039

2. 用valueOf()代替new Integer("1")

public static void main(String[] args) {
		Integer i1 = new Integer("1");
		Integer i2 = new Integer("1");
		Integer i3 = Integer.valueOf("1");
		Integer i4 = Integer.valueOf("1");
		System.out.println(i1 == i2);
		System.out.println(i3 == i4);
	}

会输出:

false
true

可以见用valueOf不会新建一个对象,实际上很多类默认的valueOf方法都不会返回一个新的实例

3. fianl 一个公用的变量

比如下面有一个比较一个日期集是否在2000年之前的方法:

public class Singleton implements Cloneable{
	public void printDateIsBefor2000(List<Calendar> days){
		Calendar c = Calendar.getInstance();
		c.set(2000, Calendar.JANUARY, 1);
		for (Calendar d : days) {
			System.out.println(c.after(d));
		}
	}
}
Calendar c = Calendar.getInstance();

将会被创建很多次, 他可以认为是一个常量,因此可以按照如下的方式来写:

public class Singleton implements Cloneable{
	private final static Calendar LIANGQIAN;

	static{
		LIANGQIAN = Calendar.getInstance();
		LIANGQIAN.set(2000, Calendar.JANUARY, 1);
	}

	public void printDateIsBefor2000(List<Calendar> days){
		for (Calendar d : days) {
			System.out.println(LIANGQIAN.after(d));
		}
	}
}

就能很大的提升效率

4. 使用视图类的方法

比如Map的keySet将会返回一个已经存在的keySet并不会返回拷贝,或者重新创建一个

5. 减少自动装填

Java的int等类型会进行自动装填,特别实在循环调用的时候,我们应该优先使用基本类型。

最后,并不是一定不要创建新的对象,JVM现代虚拟机对于小对象的回收非常快,如果频繁使用小对象可以大大增加程序的简洁性和可读性的话也是很应该使用的。

避免使用finallze方法

这个主要是因为效率的问题。

使用了finallze方法会增加垃圾回收的时间。

通常只有在用于调用native方法的析构函数的时候才会使用。

建议如果需要有资源释放等等after类的操作,可以采用提供终结方法然后try catch finally的方式。

时间: 2024-08-04 08:48:06

避免创建不必要的对象和避免使用终结方法的相关文章

多次请求会创建多个request对象吗?

问题描述 多次请求会创建多个request对象吗? 两种情况:1)我多次向同一应用发送不同请求2)多人向同一应用发送请求 解决方案 两种情况都会创建多个request. 解决方案二: http有keepalive

Effective Java (5) 避免创建不必要的对象

一.引子 一般来说,最好能重用对象而不是每次需要的时候就创建一个相同功能的新对象,特别是当对象不可变时,它始终可以被重用的.重用对象对程序性能起到重要作用. 二.重用不可变对象 对于同时提供了静态工厂方法和构造器的不可变类,通常可以使用静态工厂方法而不是构造器,以避免创建不必要的对象. Boolean b1 = Boolean.valueOf("test"); // 使用静态工厂方法(good) Boolean b2 = new Boolean("test"); /

怎么创建一个微信卡券对象

问题描述 怎么创建一个微信卡券对象 请问有没有人知道根据微信公众平台开发者文档里面的卡券对象应该怎样创建呢?(好多嵌套啊) 解决方案 创建一个属于自己的微信订阅号 解决方案二: http://mp.weixin.qq.com/wiki/9/4f455120b50741db79b54fde8896b489.html

java中不能创建fileoutptstream 类型的对象

问题描述 java中不能创建fileoutptstream 类型的对象 import java.io.*; public class FileOutputStream { public static void main(String[] args) { //定义一个FileOutputStream 类型的变量 FileOutputStream fo = null; try{ //利用绝对路径创建一个FileOutputStream类型的对象 fo = new FileOutputStream (

java string-下面这条语句一共创建了多少个对象:String s=&amp;amp;quot;a&amp;amp;quot;+&amp;amp;quot;b&amp;amp;quot;+&amp;amp;quot;c&amp;amp;quot;+&amp;amp;quot;d&amp;amp;quot;;

问题描述 下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"; 答:对于如下代码: String s1 = "a"; String s2 = s1 + "b"; String s3 = "a" + "b"; System.out.println(s2 == "ab"); System.out.pr

C#在脚步中创建别的脚步类对象cs cs1=new cs();会有警告,如何消除

问题描述 C#在脚步中创建别的脚步类对象cs cs1=new cs();会有警告,如何消除 You are trying to create a MonoBehaviour using the 'new' keyword. This is not allowed. MonoBehaviours can only be added using AddComponent(). Alternatively, your script can inherit from ScriptableObject o

Android性能优化篇:Android中如何避免创建不必要的对象

在编程开发中,内存的占用是我们经常要面对的现实,通常的内存调优的方向就是尽量减少内存的占用.这其中避免创建不必要的对象是一项重要的方面. Android设备不像PC那样有着足够大的内存,而且单个App占用的内存实际上是比较小的.所以避免创建不必要的对象对于Android开发尤为重要. 本文会介绍一些常见的避免创建对象的场景和方法,其中有些属于微优化,有的属于编码技巧,当然也有确实能够起到显著效果的方法. 使用单例 单例是我们常用的设计模式,使用这种模式,我们可以只提供一个对象供全局调用.因此单例

Android中怎样避免创建不必要的对象_Android

前言 随着在APP中分配更多的对象,你就得实施定期的强制垃圾收集,会导致用户体验产生小卡顿现象.并发垃圾处理器在Android 2.3中引入,但是总是应该避免不必要的工作,因此应该在不必要的时候避免创建对象实例. 在编程开发中,内存的占用是我们经常要面对的现实,通常的内存调优的方向就是尽量减少内存的占用. Android设备不像PC那样有着足够大的内存,而且单个App占用的内存实际上是比较小的.所以避免创建不必要的对象对于Android开发尤为重要. 本文会介绍一些常见的避免创建对象的场景和方法

代码创建word或excel对象时会卡一分钟

问题描述 在代码中创建word或者excel对象,代码会卡一分钟执行.比如:msgbox1Setx1app=CreateObject("Excel.Application")msgbox2服务器上显示1和2之间相差1分钟,这个是什么原因导致的?有没有人碰到过,急急急!! 解决方案 解决方案二:创建时看看CPU和内存情况,以判断到底是哪个进程造成的.解决方案三:CPU和内存显示都正常,没有占用很多资源的进程...解决方案四:创建Office对象慢,而且没有进程明显在抢占资源,应该是Off