目前在项目中,需要频繁的创建对象,导致程序比较慢。
优化思路
- 假如创建的对象,需要在 if 判断条件中使用,则在 if 判断条件中new新对象,这样可以减少对象的创建。
- 使用浅拷贝方案解决
Cloneable
- 对于将会频繁创建的对象,我们要让这个类实现Cloneable接口,因为这个优化的核心,就是利用clone。
- clone的最大特点就是,不会去调用任何构造方法,所以,在我看来重点应该放在构造方法中。下面我们来实现。
具体实现
1.对于需要频繁创建的实体类,需要实现Serializable和Cloneable接口
2.在此实体类中写一个getInstance(),其中就是返回clone()
package com.msun.device.anaysis.manager.entity.po.sys;
import lombok.Data;
import java.io.Serializable;
/**
* @author
* @date 2021/3/22 17:13
*/
@Data
public class User implements Serializable,Cloneable{
private static final long serialVersionUID = 1L;
private static User user = new User();
/**
* 用户id
*/
private Long userId;
/**
* 用户名称
*/
private String userName;
/**
* 调用对象创建优化
* @return
*/
public static User getInstance(){
try {
return (User) user.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new User();
}
}
3.在方法中新建对象的时候,直接getInstance()就可以。
if (1=1) {
// 将创建对象放到if中,不进入if则不创建,提高效率
// SysMenuManagerGrant grant = new SysMenuManagerGrant();
User user = User.getInstance();
}
当一个类存在继承关系时,你创建一个子类的对象时,如果在没有明确指定的情况下,子类是会隐式的去调用父类的无参构造的。假设,我们需要频繁创建的对象,是一个继承关系比较深的类的话,调用构造函数的开销不容小窥。
如果一时间内,频繁创建某对象时,这些平时不显眼的消耗一叠加起来,就变得很客观了。但是,当我们使用clone的话,就可以避免这个问题。