java,jmh
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java jmh是什么,让我们一起了解一下?
JMH是一种Java工具,用于构建、运行和分析用Java和其他针对JVM的语言编写的nano/micro/mili/macro基准测试。JMH一般用于代码的性能调优,精度可以达到纳秒级别,适用于 java以及其他基于JVM的语言。
JMH注解说明:
在运行时,注解配置被用于解析生成BenchmarkListEntry配置类实例。
一个方法对应一个@Benchmark注解,一个@Benchmark注解对应一个基准测试方法。
注释在类上的注解,或者注释在类的字段上的注解,则是类中所有基准测试方法共用的配置。
@Benchmark声明一个public方法为基准测试方法。
@BenchmarkMode通过JMH我们可以轻松的测试出某个接口的吞吐量、平均执行时间等指标的数据(假设我想测试testGson方法的平均耗时,那么可以使用@BenchmarkMode注解指定测试维度为Mode.AverageTime。)
@Measurement测量次数
@Measurement假设我想测量testGson方法五次,那么可以使用@Measurement注解。
@Warmup配置预热参数。
为了数据准确,我们可能需要让testGson方法做下热身运动。如在方法中创建GsonParser对象,预热可以避免首次创建GsonParser时因多了类加载的耗时而导致测试结果不准备的情况。jvm使用JIT即时编译器,一定的预热次数可让JIT对testGson方法的调用链路完成编译,去掉解释执行对测试结果的影响。
@OutputTimeUnit
OutputTimeUnit注解用于指定输出的方法执行耗时的单位。如果方法执行耗时为秒级别,为了便于 观察结果,我们可以使用@OutputTimeUnit指定输出的耗时时间单位为秒;如果方法执行耗时为毫秒级别,为了便于观察结果,我们可以使用@OutputTimeUnit指定输出的耗时时间单位为毫秒,否则使用默认的秒做单位,会输出10的负几次方这样的数字,不太直观。
@Fork用于指定fork出多少个子进程来执行同一基准测试方法。假设我们不需要多个进程,那么 可以使用@Fork指定为进程数为1。
@Threads注解用于指定使用多少个线程来执行基准测试方法,如果使用@Threads指定线程数为2,那么每次测量都会创建两个线程来执行基准测试方法。
具体代码如下:
public void lockInc(){ lock.lock(); try { x++; }finally { lock.unlock(); } } public void synInt(){ synchronized (this){ x++; } }}@State(Scope.Group)public static class InterMoticMonitor{ private AtomicInteger a=new AtomicInteger(); public void atoMic(){ a.incrementAndGet(); }}@Benchmark@Group("sync")@GroupThreads(10)public void syn(IntMonitor intMonitor){ intMonitor.synInt();}@Benchmark@Group("lock")@GroupThreads(10)public void lock(IntMonitor intMonitor){ intMonitor.lockInc();}@Benchmark@Group("Atomic")@GroupThreads(10)public void atominDemo(InterMoticMonitor interMoticMonitor){ interMoticMonitor.atoMic();}public static void main(String[] args) throws RunnerException { final Options opts=new OptionsBuilder() .include(Explamlee01.class.getSimpleName()) .forks(1) .warmupIterations(10) .measurementIterations(10) .build(); new Runner(opts).run();}
-
苹果手机长图怎么截图,苹果手机截长图的两种方法
1、长截图办法一iOS13上新之后自带的长截图方法,是在我们浏览网页的时候使用的。操作方法:上音量键+开关键一起按下,然后点开截好的图片,选择“整页”截图即可。2、长截图方法二利用QQ实现长截图。操作方法:首先就是需要我们打开QQ,然后试着上音量键+开关键一起按下...
-
省内移动数据流量是指什么
省内移动数据流量是指你的SIM卡所属省份的可用GPRS流量,如果出了你的卡所属的省份,去别的省,那省内移动数据流量就不可以使用,只能使用全国通用流量。移动数据流量有省内流量和全国通用流量,国内流量和省内流量是有所区别的。首先优先度不同:正常情况下,如果用户在自...
-
关于底噪的意思介绍
1、底噪亦称背景噪声,基本所有的好耳机都有底噪,耳机底噪一般都是因为前端的问题,耳机的灵敏度越高对于底噪就越敏感,一些高灵敏度和低阻抗的耳机会把底噪放大,如果加大音量的情况下,底噪会更加的明显。2、检测MP3底噪,一般方法是在夜晚等比较安静的环境中戴上耳机,播...
-
黑色背景拍照窍门详解
1、调整拍摄角度,寻找背景:既然是拍摄黑背景,在拍摄前我们尽量选择深色的背景,这样也就更加容易达到效果。不过深色不一定要是纯黑色,只要颜色较为深沉,偏向暗色调的均可。拍摄前多多观察,寻找不同的拍摄角度,以找到有反差的深色作为背景。要多尝试不同的角度,直至主体...