@Test
public void testFastJsonClone(){
int forNumber = 3000;
int keySize = 5;
long start2 = System.currentTimeMillis();
JSONObject jsonObjectClone = new JSONObject();
for (int i1 = 0; i1 < keySize; i1++) {
jsonObjectClone.put(i1 + "", -999999L);
}
ArrayList<JSONObject> arrayList2 = new ArrayList<>();
for (int i = 0; i < forNumber; i++) {
arrayList2.add((JSONObject)jsonObjectClone.clone());
}
long end2 = System.currentTimeMillis();
System.out.println("testFastJsonClone"+(end2-start2));
}
@Test
public void testFastJsonSet(){
int forNumber = 3000;
int keySize = 5;
long start1 = System.currentTimeMillis();
ArrayList<JSONObject> arrayList1 = new ArrayList<>();
for (int i = 0; i < forNumber; i++) {
JSONObject jsonObject = new JSONObject();
for (int i1 = 0; i1 < keySize; i1++) {
jsonObject.put(i1 + "", -999999L);
}
arrayList1.add(jsonObject);
}
long end1 = System.currentTimeMillis();
System.out.println("testFastJsonSet=="+(end1-start1));
}
@Test
public void testFastJsonSet2(){
int forNumber = 3000;
int keySize = 5;
long start1 = System.currentTimeMillis();
String[] keyArray = {"0","1","2","3","4","5","6","7","8","9"};
ArrayList<JSONObject> arrayList1 = new ArrayList<>();
for (int i = 0; i < forNumber; i++) {
JSONObject jsonObject = new JSONObject();
for (int i1 = 0; i1 < keySize; i1++) {
jsonObject.put(keyArray[i1], -999999L);
}
arrayList1.add(jsonObject);
}
long end1 = System.currentTimeMillis();
System.out.println("testFastJsonSet2=="+(end1-start1));
}
总结
- 初始化对象key/属性较多(具体数值根据自己对象自行测试找到阈值),推荐使用clone方法来初始化对象.但是要注意是否需要深拷贝还是浅拷贝.如果需要深拷贝,可以使用序列化(可以找第三方工具包,因为Apache下的BeanUtils性能较差,不建议使用,可以使用 Spring的BeanUtils,或者使用其他拷贝框架来尝试,但是深拷贝性能不佳!!!)
- 使用 set 方法时推荐复用key的String 来降低内存消耗和提高性能.
- 经同事复测补充:根据自己业务场景调整 forNumber 和 keySize 测试。本次测试数据量一般是3000所有forNumber使用的3000。