java beanutils 性能_对比BeanUtils、PropertyUtils、BeanCopier的性能消耗

主要代码

定义2个bean对象:

public class copyPropertiesData1 {

private Integer id;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

}

public class copyPropertiesData2 {

private Integer id;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

}

分别使用BeanUtils、PropertyUtils、BeanCopier转化1000个对象:

import java.lang.reflect.InvocationTargetException;

import java.util.ArrayList;

import java.util.List;

import org.apache.commons.beanutils.BeanUtils;

import org.apache.commons.beanutils.PropertyUtils;

import net.sf.cglib.beans.BeanCopier;

//import org.springframework.beans.BeanUtils;

public class copyPropertiesCompare {

final static List entityList;

static{

entityList = new ArrayList();

for (int i = 0; i < 10; i++) {

copyPropertiesData1 entity = new copyPropertiesData1();

entityList.add(entity);

}

}

//使用BeanUtils转化1000个对象

public void test_convert_entity_to_model_performance_use_beanutils() throws IllegalAccessException, InvocationTargetException{

long start = System.currentTimeMillis();

List modelList = new ArrayList<>();

for (copyPropertiesData1 src : entityList) {

copyPropertiesData2 dest = new copyPropertiesData2();

BeanUtils.copyProperties(src, dest);

modelList.add(dest);

}

System.out.printf("BeanUtils took time: %d(ms)%n",System.currentTimeMillis() - start);

}

//使用PropertyUtils转化1000个对象

public void test_convert_entity_to_model_performance_use_PropertyUtils() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{

long start = System.currentTimeMillis();

List modelList = new ArrayList<>();

for (copyPropertiesData1 src : entityList) {

copyPropertiesData2 dest = new copyPropertiesData2();

PropertyUtils.copyProperties(src, dest);

modelList.add(dest);

}

System.out.printf("PropertyUtils took time: %d(ms)%n",System.currentTimeMillis() - start);

}

//使用BeanCopier转化1000个对象

public void test_convert_entity_to_model_performance_use_beancopier(){

long start = System.currentTimeMillis();

BeanCopier b = BeanCopier.create(copyPropertiesData1.class, copyPropertiesData2.class, false);

List modelList = new ArrayList<>();

for (copyPropertiesData1 src : entityList) {

copyPropertiesData2 dest = new copyPropertiesData2();

b.copy(src, dest, null);

modelList.add(dest);

}

System.out.printf("BeanCopier took time: %d(ms)%n",System.currentTimeMillis() - start);

}

public static void main(String[] args) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{

copyPropertiesCompare test = new copyPropertiesCompare();

test.test_convert_entity_to_model_performance_use_beanutils();

//test.test_convert_entity_to_model_performance_use_PropertyUtils();

//test.test_convert_entity_to_model_performance_use_beancopier();

}

}

多线程调用:

import java.lang.reflect.InvocationTargetException;

import java.util.concurrent.ArrayBlockingQueue;

import java.util.concurrent.BlockingQueue;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.ThreadPoolExecutor;

import java.util.concurrent.TimeUnit;

public class ThreadPoolExecuteTest {

public static void main(String[] args){

BlockingQueue workQueue = new ArrayBlockingQueue<>(10, true);

ExecutorService executorService = new ThreadPoolExecutor(10, 10, 1, TimeUnit.MINUTES, workQueue, new ThreadPoolExecutor.CallerRunsPolicy());

for(int i=1;i<9999999;i++){

executorService.execute(new ExecuteTtest());

}

executorService.shutdown();

}

static class ExecuteTtest implements Runnable {

private ExecuteTtest() {

}

@Override

public void run() {

// TODO Auto-generated method stub

try {

System.out.println(Thread.currentThread().getName() + " thread start to work");

copyPropertiesCompare test = new copyPropertiesCompare();

// test.test_convert_entity_to_model_performance_use_beancopier();

// test.test_convert_entity_to_model_performance_use_beanutils();

test.test_convert_entity_to_model_performance_use_PropertyUtils();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

结果

单笔调用耗时如下:

BeanUtils took time: 110(ms)

PropertyUtils took time: 5(ms)

BeanCopier took time: 75(ms)

并发调用消耗cpu情况

BeanUtils.copyProperties():

image2019-1-8%2019%3A51%3A29.png?version=1&modificationDate=1546948289000&api=v2

PropertyUtils.copyProperties():

image2019-1-8%2020%3A2%3A53.png?version=1&modificationDate=1546948973000&api=v2

cglib beans.BeanCopier():

image2019-1-8%2019%3A55%3A23.png?version=1&modificationDate=1546948523000&api=v2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值