国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用JMH對比BeanUtils和BeanCopier

yuxue / 1247人閱讀

摘要:背景許多時候需要對比不同的框架或工具或算法,選擇使用性能更優的那一個。通常的做法是但這樣的做法非常不嚴謹,因為當獨立頻繁運行這一小塊代碼時,可能會針對性的做一些優化工作,而在實際的生產環境中是不會有此優化的。

背景

許多時候需要對比不同的框架或工具或算法, 選擇使用性能更優的那一個。通常的做法是

long start = System.currentTimeMillis();
for(int i=0; i

但這樣的做法非常不嚴謹, 因為當獨立頻繁運行這一小塊代碼時,Jvm可能會針對性的做一些優化工作, 而在實際的生產環境中是不會有此優化的。 如一個Jvm優化的例子

原始代碼

        int a = 1;
        int b = 2;
        int sum = a + b;

        return sum;

可能直接優化為

        return 3;

所以最好使用更嚴謹的工具 來進行benchmark的工作,

Microbenchmarkings tools are intended to bring the JVM in "stable" state prior to executing tests and run your test suite for sufficient amount of time to get statistically proven evidence of the results.
摘自:http://www.buzdin.lv/2011/01/...

而jmh就是這么一個工具

JMH is short for Java Microbenchmark Harness. JMH is a toolkit that helps you implement Java microbenchmarks correctly. JMH is developed by the same people who implement the Java virtual machine, so these guys know what they are doing.

jmh使用示例

使用jmh來對比BeanUtils和BeanCopier

代碼

@State(Scope.Thread)
public class CopyPropertiesBenchmark {
  
    private UserModel model = new UserModel();
    private BeanCopier beanCopier = BeanCopier.create(UserModel.class, UserVo.class, false);

    /**
     * 人工setter復制屬性
     *
     * @return
     */
    @Benchmark
    public UserVo manuallySetter() {
        UserVo vo = new UserVo();
        vo.setAvatar(model.getAvatar());
        vo.setNick(model.getNick());
        // ...

        return vo;
    }

    @Benchmark
    public UserVo beanUitls() {
        UserVo vo = new UserVo();
        BeanUtils.copyProperties(this.model, vo);
        return vo;
    }

    @Benchmark
    public UserVo beanCopier() {
        UserVo vo = new UserVo();
        beanCopier.copy(this.model, vo, null);
        return vo;
    }
}

運行結果

# JMH 1.14.1 (released 5 days ago)
# VM version: JDK 1.8.0_91, VM 25.91-b14
# VM invoker: /Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/jre/bin/java
# VM options: -server
# Warmup: 5 iterations, 1 s each
# Measurement: 5 iterations, 1 s each
# Timeout: 10 min per iteration
# Threads: 1 thread, will synchronize iterations
# Benchmark mode: Throughput, ops/time
# Benchmark: com.zhugw.CopyPropertiesBenchmark.beanCopier

# Run progress: 0.00% complete, ETA 00:00:30
# Fork: 1 of 1
# Warmup Iteration   1: 70737107.801 ops/s
# Warmup Iteration   2: 63704495.294 ops/s
# Warmup Iteration   3: 112706026.910 ops/s
# Warmup Iteration   4: 113979995.875 ops/s
# Warmup Iteration   5: 114595368.349 ops/s
Iteration   1: 113207053.036 ops/s
Iteration   2: 111641520.705 ops/s
Iteration   3: 111258060.492 ops/s
Iteration   4: 110293317.399 ops/s
Iteration   5: 110773170.278 ops/s


Result "beanCopier":
  111434624.382 ±(99.9%) 4285987.844 ops/s [Average]
  (min, avg, max) = (110293317.399, 111434624.382, 113207053.036), stdev = 1113057.432
  CI (99.9%): [107148636.538, 115720612.226] (assumes normal distribution)

...

# Run complete. Total time: 00:00:32

Benchmark                                Mode  Cnt          Score          Error  Units
CopyPropertiesBenchmark.beanCopier      thrpt    5  111434624.382 ±  4285987.844  ops/s
CopyPropertiesBenchmark.beanUitls       thrpt    5    2451858.127 ±   525264.183  ops/s
CopyPropertiesBenchmark.manuallySetter  thrpt    5  103524264.901 ± 17644747.083  ops/s

從上面的結果可知BeanCopier的性能優于BeanUtils, 吞吐量差距約為45倍。

參考文檔

http://tutorials.jenkov.com/j...
http://nitschinger.at/Using-J...
http://hg.openjdk.java.net/co...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66065.html

相關文章

  • 為什么阿里代碼規約要求避免使用 Apache BeanUtils 進行屬性的拷貝

    摘要:于是我建議這位小伙伴使用了進行屬性拷貝,這為我們的程序挖了一個坑阿里代碼規約當我們開啟阿里代碼掃描插件時,如果你使用了進行屬性拷貝,它會給你一個非常嚴重的警告。大名鼎鼎的提供的包,居然會存在性能問題,以致于阿里給出了嚴重的警告。 聲明:本文屬原創文章,始發于公號:程序員自學之道,并同步發布于 https://blog.csdn.net/dadiyang,特此,同步發布到 sf,轉載請注...

    raledong 評論0 收藏0
  • JAVA代碼規范

    摘要:前言作為一名全干打字員,干活時經常會被要求使用各種各樣的語言去實現各種各樣的需求,來回切換起來寫的代碼就會或多或少有點不規范。今天我們以為例,講講在代碼中,我們需要注意的某些規范。 前言 作為一名全干打字員,干活時經常會被要求使用各種各樣的語言去實現各種各樣的需求,來回切換起來寫的代碼就會或多或少有點不規范。今天我們以JAVA為例,講講在代碼中,我們需要注意的某些規范。(本文標準依賴于...

    GHOST_349178 評論0 收藏0
  • Java Bean Copy 性能大比拼

    摘要:性能大比拼簡介拷貝在工作中被大量使用,可以大幅度的提高工作量。本文對常用的工具進行了壓力測試,方便大家選擇更加適合自己的工具。本篇文章是增強介紹續篇,該專欄會持續更新,感興趣的朋友請訂閱我們。的表現反而比更好,可能是模型不一樣導致的。 Java Bean Copy 性能大比拼 簡介 Bean 拷貝在工作中被大量使用,可以大幅度的提高工作量。本文對常用的 Bean copy 工具進行了...

    lentoo 評論0 收藏0

發表評論

0條評論

yuxue

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<