作为我研究在流中使用复杂过滤器或多个过滤器之间区别的一部分,我注意到Java 12的性能比Java 8慢。
这些奇怪的结果有什么解释吗?我在这里想念什么吗?
组态:
Java 8
Java 12
VM选项: -XX:+UseG1GC -server -Xmx1024m -Xms1024m
JMH吞吐量结果:
流+复杂过滤器
public void complexFilter(ExecutionPlan plan, Blackhole blackhole) {
long count = plan.getDoubles()
.stream()
.filter(d -> d < Math.PI
&& d > Math.E
&& d != 3
&& d != 2)
.count();
blackhole.consume(count);
}
Run Code Online (Sandbox Code Playgroud)
流+多个过滤器
public void multipleFilters(ExecutionPlan plan, Blackhole blackhole) {
long count = plan.getDoubles()
.stream() …Run Code Online (Sandbox Code Playgroud) 根据 Jackson Streaming API 文档:
如果您明确重写所有转换以使用 Streaming API 而不是数据绑定,您可能能够将吞吐量提高 30-40%;这对实际生成的 JSON 没有任何更改。
阅读全文:https : //github.com/FasterXML/jackson-docs/wiki/Presentation : -Jackson-Performance
但是,根据我的基准测试,在最佳情况下吞吐量提高了 15-20%,对于写入复杂对象,甚至降低了约 23%。
难道我做错了什么?为什么使用流式 api 的复杂对象的写入操作比使用在流式 api 之上工作的 ObjectMapper 慢?
非常有趣的是,对于 java11/12,Jackson Streaming 的写入性能下降更为显着(约 2% 相比于 Java 11/12 的约 24%)。
配置:
JMH 吞吐量结果:
复杂对象
普通对象
结构: …