JHM 测试 HashMap 性能优化

1.JHM 测试 HashMap 性能优化_第1张图片

 

2.pom.xml


    
        org.openjdk.jmh
        jmh-core
        ${jmh.version}
    
    
        org.openjdk.jmh
        jmh-generator-annprocess
        ${jmh.version}
        provided
    
    
        org.junit.jupiter
        junit-jupiter-api
        5.5.2
        test
    



    UTF-8

    
    1.21

    
    1.8

    
    benchmarks



    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.1
            
                ${javac.target}
                ${javac.target}
                ${javac.target}
            
        
        
            org.apache.maven.plugins
            maven-shade-plugin
            2.2
            
                
                    package
                    
                        shade
                    
                    
                        ${uberjar.name}
                        
                            
                                org.openjdk.jmh.Main
                            
                        
                        
                            
                                
                                *:*
                                
                                    META-INF/*.SF
                                    META-INF/*.DSA
                                    META-INF/*.RSA
                                
                            
                        
                    
                
            
        
    
    
        
            
                maven-clean-plugin
                2.5
            
            
                maven-deploy-plugin
                2.8.1
            
            
                maven-install-plugin
                2.5.1
            
            
                maven-jar-plugin
                2.4
            
            
                maven-javadoc-plugin
                2.9.1
            
            
                maven-resources-plugin
                2.6
            
            
                maven-site-plugin
                3.3
            
            
                maven-source-plugin
                2.2.1
            
            
                maven-surefire-plugin
                2.17
            
        
    

3.

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.infra.Blackhole;
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;
@BenchmarkMode(Mode.AverageTime) // 测试完成时间
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 1, time = 1, timeUnit = TimeUnit.SECONDS) // 预热 1 轮,每次 1s
@Measurement(iterations = 5, time = 5, timeUnit = TimeUnit.SECONDS) // 测试 5 轮,每次 3s
@Fork(1) // fork 1 个线程
@State(Scope.Benchmark)
@Threads(100)
public class HashMapTest {

    @Benchmark
    public void noSizeTest(Blackhole blackhole) {
        Map map = new HashMap();
        for (int i = 0; i < 1024; i++) {
            map.put(i, i);
        }
        // 为了避免 JIT 忽略未被使用的结果
        blackhole.consume(map);
    }
    @Benchmark
    public void setSizeTest(Blackhole blackhole) {
        Map map = new HashMap(1367);
        for (int i = 0; i < 1024; i++) {
            map.put(i, i);
        }
        // 为了避免 JIT 忽略未被使用的结果
        blackhole.consume(map);
    }

    public static void main(String[] args) throws RunnerException {
        final Options opt = new OptionsBuilder()
                .include(HashMapTest.class.getSimpleName())
//           .forks(1)
                .build();

        new Runner(opt).run();
    }
}

4.JHM 测试 HashMap 性能优化_第2张图片

测试前后结果是对HashMap 集合初始值指定大小 的测试结果比较:差异1.07倍。建议对集合进行初始化大小 。

你可能感兴趣的:(Java)