如何使用 JMH 按顺序运行基准测试中的方法?

2024-02-06

在我的场景中,基准测试中的方法应该在一个线程中顺序运行并按顺序修改状态。

例如,有一个List<Integer> called num在基准类中。我想要的是:首先,运行add()将数字添加到列表中。然后,运行remove()从列表中删除该号码。

调用顺序必须是add() --> remove(). If remove()之前运行add()或者它们同时运行,它们会引发异常,因为列表中没有元素。

那是,add() and remove()必须被称为依次地 and in one thread.

In 使用 JMH 控制方法的顺序 https://stackoverflow.com/questions/36261369/control-the-order-of-methods-using-jmh,我了解到这些方法是按字典顺序运行的。我尝试了下面的代码:

@State(Scope.Group)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@BenchmarkMode(Mode.AverageTime)
@Fork(value = 10)
public class ListBenchmark {

    private List<Integer> num;

    public static void main(String[] args) throws RunnerException {
        Options options = new OptionsBuilder()
                .verbosity(VerboseMode.NORMAL)
                .syncIterations(true)
                .threads(1)
                .include(".*" + ListBenchmark.class.getCanonicalName() + ".*")
                .build();

        new Runner(options).run();
    }

    @Setup(Level.Invocation)
    public void setup() throws Exception {
        num = new ArrayList<>();
    }

    @Benchmark
    @BenchmarkMode(Mode.SingleShotTime)
    @Group("num")
    public void add() throws Exception {
        num.add(1);
    }

    @Benchmark
    @BenchmarkMode(Mode.SingleShotTime)
    @Group("num")
    public void remove() throws Exception {
        num.remove(0);
    }
}

但这不起作用,因为add方法和remove方法同时运行。在某些情况下,remove之前运行add并提高IndexOutOfBoundsException.

如何使用 JMH 顺序运行基准测试中的方法?


你从一个错误的前提开始,一切都会因此而失败。您可以看到作者更广泛的解释here https://github.com/openjdk/jmh/blob/master/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_15_Asymmetric.java#L56。您希望在隐含不对称的地方实现对称。

如果你想看看需要多少钱add -> remove将它们放在同一个@Benchmark,对于个人来说也是如此add or remove通过不同的State。例如:

@State(Scope.Thread)
public static class BothAddAndRemove {

    List<Integer> num;

    @Setup(Level.Invocation)
    public void setup() throws Exception {
        num = new ArrayList<>();
    }
}

@State(Scope.Thread)
public static class RemoveOnly {

    List<Integer> num;

    @Setup(Level.Invocation)
    public void setup() throws Exception {
        num = new ArrayList<>();
        num.add(1);
    }
}


@Fork(25)
@Benchmark
@BenchmarkMode(Mode.SingleShotTime)
public int add(BothAddAndRemove both) {
    both.num.add(1);
    return both.num.remove(0);
}

@Fork(25)
@Benchmark
@BenchmarkMode(Mode.SingleShotTime)
public int removeOnly(RemoveOnly removeOnly) {
    return removeOnly.num.remove(0);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 JMH 按顺序运行基准测试中的方法? 的相关文章

  • Gson.toString() 给出错误“IllegalArgumentException:多个名为 mPaint 的 JSON 字段”

    我想将自定义对象转换为字符串并保存在 SharedPreferences 中 这是我的最终目标 我尝试了下面的行但失败了 String matchString gson toJson userMatches Logcat 10 11 15
  • 将 CSV 文件读入 Java 作为数据库表

    我发现了很多关于使用 Java 读取 CSV 的帖子 并且他们所指向的 API 在读取 CSV 文件时都采用了面向行的方法 就像 当你得到一行时 获取每一列的值 我希望有一个更高级别的 API 比如在 Perl 中 DBI 允许您在 CSV
  • eclipse juno 打开时出错

    在安装 Eclipse 并正常工作一年多后 我今天打开 Eclipse Juno 并在打开工作区时收到一条错误消息 我使用的是 Windows 8 64 位 Java 64 位和 Eclipse 64 位 此后我尝试重新安装 Java 和
  • 匿名内部类显示不正确的修饰符

    据我了解 以下代码应该打印true作为输出 但是 当我运行这段代码时 它正在打印false 来自 Java 文档15 9 5 匿名类 https docs oracle com javase specs jls se8 html jls 1
  • java.lang.NoClassDefFoundError:HttpSessionListener

    我正在尝试部署一场我没有编写的战争 但我在日志中收到此错误 java lang NoClassDefFoundError HttpSessionListener 我知道 HttpSessionListener 位于servlet api j
  • Java 泛型和数字类型

    我想创建一个通用方法来有效地执行此操作 class MyClass static
  • 在 Java 5 及更高版本中迭代 java.util.Map 的所有键/值对的最简单方法是什么?

    在 Java 5 及更高版本中迭代 java util Map 的所有键 值对的最简单方法是什么 假设K是您的密钥类型 并且V是你的值类型 for Map Entry
  • 在 javafx 中注册鼠标处理程序,但处理程序不是内联的

    我有一个 JavaFX 应用程序变得有点大 我想保持代码的可读性 我有一个折线图 我希望内置缩放功能 该功能在单击鼠标时发生 我知道我需要向图表注册鼠标侦听器 我无法从 Oracle 示例中弄清楚什么 即如下所示 http docs ora
  • 如何使用 UUID 生成唯一的正 Long

    我需要为我的数据库主键列生成唯一的长 ID 我以为我可以用UUID randomUUID getMostSignificantBits 但有时它也会产生一些负多头 这对我来说是个问题 是否可以从 UUID 中仅生成正长 将会有数十亿个条目
  • 将传入字符串的 unicode 表示形式转换为 UTF-8?

    我正在读取一些已经转换为 html 样式 代码的数据 我现在需要将其转换回 UTF 8 字符以供查看 不幸的是我无法使用浏览器查看该字符串 我读过有关 java 中的转换的内容 似乎如果你有一个 uxxxx 字符串 那么编译器会为你转换 然
  • 如何在 Spring Boot 中创建 Apache POI Excel 视图配置

    当我想使用 Spring Boot Web 将数据导出到 Excel 时遇到问题 我使用 Thymeleaf 作为模板引擎 由 Spring Boot 自动配置 但是当我在附加配置中添加 XmlViewResolver 时 由 XmlVie
  • 获取证书链

    我正在 Java 中使用 X509 证书 给定一个证书 是否可以在签名层次结构中找到所有其他证书 直到找到根证书 我有一个证书文件 带有 cer扩展名 我想提取父签名证书 我想继续查找该证书的父证书 直到获得最终的自签名根证书 我已经检查了
  • Android - 保持用户登录状态

    我正在尝试使用 PHP 和 MySQLi for Android 进行登录 我不明白的是如何保持用户登录状态 我看到一个简单的教程 其中有人使用 SQLite 来保护信息 但我不知道这是否真的安全 如何保存用户信息以保持用户登录状态 谢谢
  • HashSet 与 LinkedHashSet

    它们之间有什么区别 我知道 LinkedHashSet 是 HashSet 的有序版本 维护一个跨所有元素的双向链接列表 使用此类代替 HashSet 当您关心迭代顺序时 当你迭代 HashSet 时 顺序是不可预测的 而 LinkedHa
  • 线程睡眠阻止我的 Swing 应用程序执行

    我的应用程序发生的事情是有道理的 但我不知道如何修复它 以下是我的应用程序功能的简要描述 计时器窗口应显示在屏幕右下角并显示实时时间 一小时后 它应该执行一些操作 我还没有决定该操作 我面临的问题是定时器 java当我刷新实时计时器的秒数时
  • 有时 Properties.load() 会跳过行

    在以下情况下 Properties load 会跳过 InputStream 的第二行 这是 Java 的错误还是正常行为 public class PropTest public static void main String args
  • 相当于 C# 中 Java 的“ByteBuffer.putType()”

    我正在尝试通过从 Java 移植代码来格式化 C 中的字节数组 在 Java 中 使用方法 buf putInt value buf putShort buf putDouble 等等 但我不知道如何将其移植到 C 我尝试过 MemoryS
  • Maven `help: effective-pom` 只为单个项目生成,而不是所有项目

    我想为多模块构建中的所有子项目生成有效的 pom The help effective pom文档here http maven apache org plugins maven help plugin usage html The hel
  • 在 Java 服务器中验证 Windows 用户

    我正在开发一个用 Java 编写的服务器和一个在同一网络上的 Windows 计算机上运行的客户端 用 Net 编写的桌面应用程序 我希望进行一些基本身份验证 以便服务器可以确定运行客户端的用户的用户名 而不需要用户在客户端中重新输入其 W
  • 在Java的System.out中以表格格式输出

    我正在从数据库获取结果 并希望将数据作为 Java 标准输出中的表输出 我尝试过使用 t 但我想要的第一列的长度变化很大 有没有办法将其显示在类似输出的漂亮表格中 Use System out format http java sun co

随机推荐

  • 使用node.js和socket.io进行套接字身份验证(使用DaftMonk的generator-angular-fullstack)

    我在用着DaftMonk 的生成器 角度 全栈 https github com DaftMonk generator angular fullstack对于所有设置为默认的项目 我发现自己需要使用它进行套接字身份验证 因此我在 socke
  • 在android中连续检查互联网连接的最佳方法是什么

    我正在开发一个应用程序 在该屏幕中 在 onCreate 方法之后立即检查互联网连接 如果网络连接良好 我将调用一个 AsyncTask 类来加载国家 地区列表 并将其显示在 spinnerView 的屏幕上 如果没有网络连接 我将向用户显
  • 使用 Laravel 5.4 进行自定义登录密码检查

    如果用户尝试登录我的 Laravel 应用程序 并且密码与数据库中的 password 列不匹配 我也想根据另一个密码列 old system password 检查它 我正在使用默认的 Laravel 身份验证系统 据我所知 我应该能够创
  • 如何将 2d 网格点 (x,y) 作为 3d 点 (x,y,z) 映射到球体上

    我有一组 2d 网格点 x y 我想将其作为 3d 点 x y z 映射 投影到球体上 我意识到随着abs y 的增加 会有一些向两极的扭曲 但我的网格补丁只会覆盖赤道附近的球体的一部分 因此可以避免严重的扭曲 我很难找到正确的方程式 摘自
  • 多态引擎,用托管语言?

    我的编程技能已经发展到可以很好 轻松地完成大多数日常工作的程度 我想有一天 制作一个多态引擎将真正考验我的技能 我想知道是否有人对制作一个多态引擎有任何指导 程序的多态引擎 从哪里开始 也许一些代码示例 在这一点上真的任何事情都会有帮助 这
  • 如何将一段文本解析成句子? (最好是红宝石)

    考虑到 Mr and Dr 和 U S A 等案例 您如何将段落或大量文本分解为句子 最好使用 Ruby 假设你只是将句子放入数组的数组中 更新 我想到的一种可能的解决方案是使用词性标注器 POST 和分类器来确定句子的结尾 从琼斯那里获取
  • 在 shell 中将 .txt 转换为 .csv

    我有一个文本文件 ifile txt 1 4 22 0 3 3 2 3 2 2 34 1 5 4 2 3 3 2 33 0 34 0 2 3 4 12 3 0 43 0 4 4 我想将其转换为 csv 文件 ofile txt ID No
  • 如何使用新的 Azure 存储 SDK v12 打开新 Blob 的可写流?

    我正在使用 Azure Storage SDK v12 并且正在寻找一种方法来打开特定 Blob 的流 就像以前的版本一样 CloudBlobClient cloudBlobClient account CreateCloudBlobCli
  • 更改 URL 而不重新加载页面

    我想知道是否可以在不重新加载页面的情况下更改浏览器中 URL 的内容 我使用 jQuery 和 Ajax 加载页面的新部分 当我选择 产品一 时 直接链接是mysite com product1对于 产品二 来说是mysite com pr
  • Azure 应用服务无法验证 .pfx 文件:证书验证失败,因为无法加载

    多年来 我能够使用 OpenSSL 创建方法在 Azure 应用服务上上传新的 pfx 文件以进行 SSL 绑定这个堆栈溢出答案 https stackoverflow com a 17284371 1399567 openssl pkcs
  • Windows Phone 8 中的设备方向

    我想在使用 PhotoCaptureDevice 选项拍摄快照时根据 Windows Phone 8 中的设备方向旋转图像 当设备方向为 LandscapeLeft Image to be rotated to 90 LandscapeRi
  • 有人能解释一下吗:0.2 + 0.1 = 0.30000000000000004? [复制]

    这个问题在这里已经有答案了 重复项 浮点数是如何存储的 什么时候重要 https stackoverflow com questions 56947 how is floating point stored when does it mat
  • 如何对 numpy 字符串数组的每个元素进行切片?

    Numpy 有一些非常有用的字符串操作 http docs scipy org doc numpy reference routines char html 它将常用的 Python 字符串操作向量化 与这些操作相比pandas str n
  • 来自带有列表的字典的 Pandas DataFrame

    我有一个 API 它以 Python 字典的形式返回一行数据 大多数键都有一个值 但有些键的值是列表 甚至是列表的列表或字典的列表 当我将字典放入 pd DataFrame 并尝试将其转换为 pandas DataFrame 时 它 会抛出
  • 使用 FPDF 使文本在单元格中换行?

    现在 当我使用带有文本的单元格时 它全部保留在一行上 我知道我可以使用写入功能 但我希望能够指定高度和宽度 这就是我现在所拥有的 但正如我所说 文本不会换行以保留在尺寸中 pdf gt Cell 200 40 reportSubtitle
  • 为什么我们在 Hibernate 中使用 @Embeddable

    有什么用 Embedded and Embeddable处于休眠状态 因为我在互联网上找到的每个示例都是在单个表中插入数据并使用两个不同的类来执行此操作 我的观点是 如果我使用单个表 那么我可以映射单个类内的所有列 那么为什么我应该使用不同
  • 关闭mysql连接重要吗?

    关闭mysql连接效率是否至关重要 或者在php文件运行后它会自动关闭吗 来自文档 http us php net function mysql connect 注意 脚本执行结束后 到服务器的链接将立即关闭 除非通过显式调用 mysql
  • Xcode 4.4 约束错误

    我正在使用 Xcode 4 4 并在界面生成器中创建视图 当我运行我的应用程序时 我始终收到以下约束错误 Unable to simultaneously satisfy constraints
  • Realm React-Native:从 JS(反应本机代码)和 android(java)访问相同的领域

    我有一个用例 我在 android 代码 本机 中接收一些数据 我想将此数据插入到由我的反应代码打开或创建的同一领域中 或者在同一个领域写作 我怎样才能实现这个目标 感谢所有的帮助 附 我知道我可以以某种方式制作一个本机模块并将数据发送回我
  • 如何使用 JMH 按顺序运行基准测试中的方法?

    在我的场景中 基准测试中的方法应该在一个线程中顺序运行并按顺序修改状态 例如 有一个List