问题标签 [caliper]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何使用 Caliper 进行基准测试?
我试图弄清楚如何使用 Caliper 在 Eclipse 中进行基准测试,但我一无所获。我尝试按照此处找到的 26 分钟教程进行操作:https ://code.google.com/p/caliper/但我很快就迷路了。我已经下载了 Caliper jar 文件,但我不确定它应该在哪个文件夹中。我还下载了 Maven for Eclipse 插件,但我什至不确定这是否有必要。是否可以从 Eclipse 帮助菜单中的“安装新软件..”选项安装 Caliper?我只想能够对我为正在学习的数据结构和算法类创建的一些算法进行非常简单的速度测试。
java - 运行 caliper 命令行
好的,卡尺又出现了一些问题。
我现在在 Linux 上运行,尝试使用 beta 快照。我正在尝试仅使用 jar 通过命令行运行 Google 的卡尺。(测试版快照)
我无法在这台机器上访问 maven,安装它是不可能的。我只想使用一个罐子,也许一旦它起作用了,我就可以编写一个脚本或其他东西。
这是我正在做的事情:
1.使用小例子Benchmark:
2.编译javac -cp caliper-1.0-beta-SNAPSHOT-all.jar Tutorial.java
3.(尝试)运行
java -cp caliper-1.0-beta-SNAPSHOT-all.jar com.google.caliper.runner.CaliperMain Tutorial.Benchmark1
, 接收消息Benchmark class not found: Tutorial.Benchmark1
。
我试图从各种来源的点点滴滴的信息中解决这个问题,但我真的很喜欢这个。我会很感激任何意见。
java - JDK8 LocalDate.toEpochDay 的奇怪性能下降
我很好奇我们是否最终获得了一个带有 JDK8 的快速日期时间库。几乎所有的LocalDate
计算都使用toEpochDay
了,所以我查看了源代码,大量的划分和分支让我很好奇我是否可以做得更好。
我消除了一些分支和除一个以外的所有分支,但是加速比预期的要差。所以我的第一个问题是,使用多重除法的算法怎么可能只需要大约 30 个周期(吞吐量)。Holger 的评论似乎已经回答了这个问题:除以一个小常数得到 JIT-ed 到乘法。我是手动完成的,现在我一直以 2 倍的速度击败原始实现。
基准测试非常简单,只需遍历一个随机数组LocalDate
并转换它们中的每一个toEpochDay
。尽管存在随机性,但结果非常一致。数组的大小是一个参数,我的主要问题是2000 到 30000 之间的大幅减速来自哪里。由于数据不再适合 L1 缓存,因此应该会有所放缓,但是两种算法的内存访问完全相同(即,除了date
从数组中获取之外没有)。
仍然悬而未决的问题是:当迭代一个数组时,同一函数的两个简单的无内存访问实现的行为是如何发生变化的?原始算法的减速比我的要大得多。
java - 是否可以使用微基准框架仅对某些语句计时?
我计划对我的 java 代码进行微基准测试,其中涉及对本地和远程数据库的多次调用。我正要使用 System.nanoTime() 但开始阅读有关 jmh 和 caliper 等微基准测试框架的信息。绝对推荐使用这些框架,但是从我读到的任何内容(很少)看来,我们只能对一个完整的方法进行基准测试,而且它还允许我们以非侵入性的方式进行此操作(wrt 现有代码),即我们不需要乱扔现有代码使用 jmh/caliper 的代码/注释。
我只想对某些方法中的特定代码(语句)进行基准测试。是否可以使用任何微基准测试框架来做到这一点?请对此提供一些见解。
java - 为什么 short 基本类型比 long 或 int 慢得多?
我试图通过将 int 原语更改为 short 来优化 Android 游戏的 RAM 使用。在我这样做之前,我对 Java 中原始类型的性能很感兴趣。
所以我使用 caliper 库创建了这个小测试基准。
测试的结果让我吃惊。
测试环境
在 Caliper 库下运行基准测试。
测试结果
https://microbenchmarks.appspot.com/runs/0c9bd212-feeb-4f8f-896c-e027b85dfe3b
诠释 2.365 纳秒
长 2.436 ns
短 8.156 ns
测试结论?
short 原始类型比 long 和 int 原始类型明显慢(3-4~ 倍)?
问题
为什么 short 原语比 int 或 long 慢得多?我希望 int 原始类型在 32 位 VM 上最快,并且 long 和 short 在时间上相等,或者 short 更快。
Android手机也是这样吗?知道 Android 手机通常在 32 位环境中运行,现在越来越多的手机开始配备 64 位处理器。
java - 由于 JIT 编译,Caliper 基准测试失败
我得到了一个 Caliper 基准,如下所示:
所以,我有一个创建数据结构(createCourse(...)
)的方法,我想测量创建这个结构需要多长时间。
但是,当我运行基准测试时,出现以下异常:
异常告诉我,由于 JIT 编译,基准测试失败。那么,如何防止这里的 JIT 编译呢?
我已经尝试使用随机值初始化数据结构(如您在代码中看到的那样),我尝试在测试中返回一个值(如您在代码中看到的那样)并且我尝试使用该course
对象,例如调用course.getSize()
在上面。但没有任何效果。
java - 使用 javac 成功编译同一个 jar 后,java 未在 jar 中找到类
我在 stackoverflow 上查看这个问题,并认为我会尝试自己运行基准测试。我下载了caliper并使用maven成功编译。然后,我使用 maven 创建的 jar 从链接的问题中成功编译了HashCodeBenchmark 。但是,当我尝试运行 HashCodeBenchmark 时,java 抱怨它在 jar 中找不到入口点类。
我完全困惑,不知道问题是什么。
编译:
跑:
java - 为 Google Caliper 的基准指定其他维度
我正在使用 Google Caliper(最新的主代码)对二维的四段代码进行基准测试。例如,以下基准测试方法:
我想做的是用一些额外的维度来注释每个基准,以便在结果应用程序上显示/操作,这样我就可以比较一个深度和一个宽度,也可以比较一个深度和两个深度和一个宽度有两个宽度。例如:
指定的尺寸与在 UI 上显示的参数非常相似,但我不能使用参数,因为在每种情况下调用的代码都不同。有没有办法用当前版本的 Caliper 做到这一点?
microbenchmark - 卡尺误差 使用 microbenchmark 仪器
我似乎无法从这里开始。我拉下代码并自己构建了卡尺,这解决了我的第一组问题,但现在我遇到了需要微型仪器的错误
这个实验需要一个微基准。定时器的粒度(535ns)大于测量运行时间(331.0μs)的0.1%。使用微基准仪器进行准确测量。
那么,如何设置微型仪器呢?
我在要运行的方法之前使用@Benchmark,在我的主要内部看起来像这样:
我尝试将运行时更改为“微”,但这没有用。有任何想法吗?