欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

JMH測試AtomicLong和LongAdder的性能

AtomicLong 和 LongAdder 的區(qū)別

AtomicLong

1、AtomicLong是利用了底層的CAS操作來提供并發(fā)性。
2、在并發(fā)量較低的環(huán)境下,線程沖突的概率比較小,自旋的次數(shù)不會很多。但是,高并發(fā)環(huán)境下,N個線程同時進(jìn)行自旋操作,會出現(xiàn)大量失敗并不斷自旋的情況,此時AtomicLong的自旋會成為瓶頸。
3、AtomicLong中有個內(nèi)部volatile變量value保存著實際的long值,所有的操作都是針對該變量進(jìn)行。也就是說,高并發(fā)環(huán)境下,value變量其實是一個熱點,也就是N個線程競爭一個熱點。

創(chuàng)新互聯(lián)主營永城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App定制開發(fā),永城h5成都微信小程序搭建,永城網(wǎng)站營銷推廣歡迎永城等地區(qū)企業(yè)咨詢

LongAdder

1、LongAdder的基本思路就是分散熱點,將value值分散到一個數(shù)組中,不同線程會命中到數(shù)組的不同槽中,各個線程只對自己槽中的那個值進(jìn)行CAS操作,這樣熱點就被分散了,沖突的概率就小很多。如果要獲取真正的long值,只要將各個槽中的變量值累加返回。
2、低并發(fā)、一般的業(yè)務(wù)場景下AtomicLong是足夠了。如果并發(fā)量很多,存在大量寫多讀少的情況,那LongAdder可能更合適。

利用JMH測試AtomicLong和LongAdder的性能

1、創(chuàng)建一個Maven工程,Pom.xml代碼如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.jane</groupId>
    <artifactId>jmh2</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- JMH -->
        <dependency>
            <groupId>org.openjdk.jmh</groupId>
            <artifactId>jmh-core</artifactId>
            <version>1.20</version>
        </dependency>
        <dependency>
            <groupId>org.openjdk.jmh</groupId>
            <artifactId>jmh-generator-annprocess</artifactId>
            <version>1.20</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>run-benchmarks</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                        <configuration>
                            <classpathScope>test</classpathScope>
                            <executable>java</executable>
                            <arguments>
                                <argument>-classpath</argument>
                                <classpath />
                                <argument>org.openjdk.jmh.Main</argument>
                                <argument>.*</argument>
                            </arguments>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

2、啟動文件

package com.jane;

import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.LongAdder;

@BenchmarkMode(Mode.AverageTime) // 測試方法平均執(zhí)行時間,如果測試吞入量則換成Mode.Throughput
@OutputTimeUnit(TimeUnit.MICROSECONDS) // 輸出結(jié)果的時間粒度為微秒
public class Main {
    private static AtomicLong count = new AtomicLong();
    private static LongAdder longAdder = new LongAdder();

    @Benchmark
    @Threads(1) //單位時間內(nèi)也,默認(rèn)一秒啟動多少個線程進(jìn)行測試
    public void atolong(){
        count.getAndIncrement(); //測試AtomicLong遞增方法
    }

    @Benchmark
    @Threads(1) //單位時間內(nèi)也,默認(rèn)一秒啟動多少個線程進(jìn)行測試
    public void loadder(){
        longAdder.increment();//測試LongAdder的遞增方法
    }

    public static void main(String[] args) throws RunnerException {
        Options options = new OptionsBuilder()
                .include(Main.class.getSimpleName())
                .forks(1)
                .build();
        new Runner(options).run();
    }
}

3、單線程下的性能對比

JMH測試AtomicLong和LongAdder的性能

吞吐量:AtomicLong性能更好

JMH測試AtomicLong和LongAdder的性能

平均消耗時間:AtomicLong耗時更小

JMH測試AtomicLong和LongAdder的性能

4、20個線程下的性能對比

JMH測試AtomicLong和LongAdder的性能

吞吐量:LongAdder優(yōu)勢明顯

JMH測試AtomicLong和LongAdder的性能

平均消耗時間:LongAdder優(yōu)勢明顯

JMH測試AtomicLong和LongAdder的性能

當(dāng)前名稱:JMH測試AtomicLong和LongAdder的性能
網(wǎng)站鏈接:http://aaarwkj.com/article46/gpgdeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、網(wǎng)站營銷、商城網(wǎng)站、網(wǎng)站策劃、響應(yīng)式網(wǎng)站企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
欧美亚洲精品在线观看| 日韩一区二区三区四区精品| 日本人妻久久中文字幕精品| 日韩欧美中文字幕一区二区| 国产精品自拍av一区二区| 亚洲天堂日韩欧美在线一区| 日本一区二区三区免费黄视频| 成人爱爱视频在线免费观看| 久久五十路初次拍五十路| 欧美美女午夜福利视频| 国产精品一区二区av不卡| 国产传媒在线观看精品| 国内成人午夜激情视频| 99国产精品久久久久久| 日本在线观看高清区一区二| 欧美特黄大片在线观看| 日韩最新视频一区二区三| 亚洲精品一区二区三区色| 99热这里在线只有精品| 国产视频一区2区三区| 人妻中文字幕在线一二区| 福利一区福利二区视频| 国产看片色网站亚洲av| 国产真实内射在线观看| 国产手机在线91精品观看| 蜜臀av一区二区在线观看| 国语自产拍在线观看不卡| 亚洲麻豆精品午夜免费| 国产91精品系列在线观看| 97视频在线观看观看| 中文字幕日韩激情欧美一区| 区二区三区毛片乱码免费| 日本久久高清免费观看| 蜜桃av网站在线播放| 国产传媒网约在线观看| 日本欧美一区二区精品| 日本视频三区在线播放| 亚洲中文自偷自拍另类| 日韩欧美一区二区在线播放| 声入人心第一季在线观看| 黄色av网站在线免费|