小编Ser*_*nov的帖子

Java 8:Class.getName() 减慢字符串连接链

最近我遇到了一个关于字符串连接的问题。该基准对其进行了总结:

@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class BrokenConcatenationBenchmark {

  @Benchmark
  public String slow(Data data) {
    final Class<? extends Data> clazz = data.clazz;
    return "class " + clazz.getName();
  }

  @Benchmark
  public String fast(Data data) {
    final Class<? extends Data> clazz = data.clazz;
    final String clazzName = clazz.getName();
    return "class " + clazzName;
  }

  @State(Scope.Thread)
  public static class Data {
    final Class<? extends Data> clazz = getClass();

    @Setup
    public void setup() {
      //explicitly load name via native method Class.getName0()
      clazz.getName();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在 JDK …

java string performance string-concatenation compiler-optimization

18
推荐指数
1
解决办法
454
查看次数

有人可以解释 jlString 上逐字符迭代的显着性能差异吗?

我尝试了两种方法在 java.lang.String 上逐个字符地迭代,发现它们令人困惑。该基准对其进行了总结:

@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Fork(jvmArgsAppend = {"-Xms2g", "-Xmx2g"})
public class CharByCharIterationBenchmark {

  @Benchmark
  public void toCharArray(Data data, Blackhole b) {
    char[] chars = data.string.toCharArray();
    for (char ch : chars) {
      b.consume(ch);
    }
  }

  @Benchmark
  public void charAt(Data data, Blackhole b) {
    String string = data.string;
    int length = string.length();
    for (int i = 0; i < length; i++) {
      b.consume(string.charAt(i));
    }
  }

  @State(Scope.Thread)
  public static class Data {
    String string;

    @Param({"true", "false"})
    private boolean latin;

    @Param({"5", "10", "50", "100"}) …
Run Code Online (Sandbox Code Playgroud)

java string performance benchmarking

6
推荐指数
1
解决办法
125
查看次数

OpenAPI 规范:忽略查询参数的默认值

我将 OpenAPI 3 规范中的参数描述为

review_requests:
  get:
    tags:
      - dashboard
    operationId: reviewRequests
    parameters:
      - name: page
        in: query
        default: 0
        description: Page number
        schema:
          type: integer
    responses:
      200:
        description: OK
Run Code Online (Sandbox Code Playgroud)

编译后,我发现 Java 代码中缺少默认值,并且参数实际上描述如下:

@Valid @RequestParam(value = "page", required = false) Integer page
Run Code Online (Sandbox Code Playgroud)

如果 GET 请求中未提供参数,则0我不会收到。null据我了解应该是

@Valid @RequestParam(value = "page", required = false, defaultValue = "0") Integer page
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是我做错了什么?

swagger openapi openapi-generator

6
推荐指数
1
解决办法
7953
查看次数

Java 17 和 JEP 306 之后 Math 和 StrictMath 之间还有区别吗?

JEP 306在 Java 17 中实现,提供始终严格的浮点语义,弃用该strictfp标志。这是否意味着java.lang.Math可以指望其行为与 中的类似方法完全相同StrictMath(即,该java.lang.Math方法不能再被 JVM 替换为过去所允许的内在函数)?这是否也意味着无论使用哪个库,不同架构之间的浮点数学结果不应再有任何差异?

我很好奇我是否误解了新的 Java 17 功能,因为我们确实看到 Apple Silicon 与 Intel 之间今天的代码存在差异。

java floating-point strictfp java-17

6
推荐指数
1
解决办法
230
查看次数

LinuxPerfAsmProfiler 显示 Java 8 的 Java 代码对应程序集热点,但不显示 Java 14

在调查与 Spring 的实例化相关的问题时org.springframework.util.ConcurrentReferenceHashMap(截至spring-core-5.1.3.RELEASE),我使用LinuxPerfAsmProfiler与 JMH 一起提供的工具来分析生成的程序集。

我只是运行这个

@Benchmark
public Object measureInit() {
  return new ConcurrentReferenceHashMap<>();
}
Run Code Online (Sandbox Code Playgroud)

JDK 8 上的基准测试允许识别不明显的热点之一:

  0.61%        0x00007f32d92772ea: lock addl $0x0,(%rsp)     ;*putfield count
                                                             ; - org.springframework.util.ConcurrentReferenceHashMap$Segment::&lt;init&gt;@11 (line 476)
                                                             ; - org.springframework.util.ConcurrentReferenceHashMap::&lt;init&gt;@141 (line 184)
 15.81%        0x00007f32d92772ef: mov    0x60(%r15),%rdx
Run Code Online (Sandbox Code Playgroud)

这对应于对 volatile 字段的不必要的默认值分配:

  0.61%        0x00007f32d92772ea: lock addl $0x0,(%rsp)     ;*putfield count
                                                             ; - org.springframework.util.ConcurrentReferenceHashMap$Segment::&lt;init&gt;@11 (line 476)
                                                             ; - org.springframework.util.ConcurrentReferenceHashMap::&lt;init&gt;@141 (line 184)
 15.81%        0x00007f32d92772ef: mov    0x60(%r15),%rdx
Run Code Online (Sandbox Code Playgroud)

Segment依次在以下构造函数的循环中实例化CCRHM

protected final class Segment extends ReentrantLock …
Run Code Online (Sandbox Code Playgroud)

java performance assembly profiling jmh

5
推荐指数
1
解决办法
101
查看次数

如何在 Elasticsearch 中查找默认值/更改 search.allow_expense_queries

我想知道是否有一种方法可以查看 Elasticsearch 参数的默认值(例如在 Kibana 中),并在必要时通过 DevTools 的控制台或?部分search.allow_expensive_queries进行更改。environmentdocker-compose.yml

elasticsearch

0
推荐指数
1
解决办法
2313
查看次数