优化思路
具体实现
参考连接:︶ㄣ霞光里
目前在项目中,需要频繁的创建对象,导致程序比较慢。
优化思路
假如创建的对象,需要在 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()
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
3.在方法中新建对象的时候,直接getInstance()就可以。
if (1=1) {
// 将创建对象放到if中,不进入if则不创建,提高效率
//SysMenuManagerGrant grant = new SysMenuManagerGrant()
User user = User.getInstance()
}
1
2
3
4
5
1
2
3
4
5
当一个类存在继承关系时,你创建一个子类的对象时,如果在没有明确指定的情况下,子类是会隐式的去调用父类的无参构造的。假设,我们需要频繁创建的对象,是一个继承关系比较深的类的话,调用构造函数的开销不容小窥。
如果一时间内,频繁创建某对象时,这些平时不显眼的消耗一叠加起来,就变得很客观了。但是,当我们使用clone的话,就可以避免这个问题。
你读取和保存是怎么弄的。这个删除也就相当于 读取时当它不存在 ,保存时忽略这项。。所以如果你没有删除功能,只能在读取和保存的时候作手脚,是这个意思吧。??这样的话,你只能另外写个配置,弄个删除的相关标识符,在读取的时候每项都判断。如果和删除中的相符,跳过。。
其实删除的话,一般就再遍历一次,。反正计算机速度都快。重新读次也不会差多少时间。