小编cgi*_*cgi的帖子

JVM 中对 java.lang.ref.Reference$Lock 上的数组分配的大量锁定

我们使用 Java Flight Recorder 分析了我们的应用程序,并在 java.lang.ref.Reference$Lock 对象上发现了大量锁。

我调查了堆栈跟踪中的一些地方,发现在所有情况下 - 都有数组分配

在此处输入图片说明

代码示例(图像上的位置 3):

    public static char[] copyOfRange(char[] original, int from, int to) {
        int newLength = to - from;
        if (newLength < 0)
            throw new IllegalArgumentException(from + " > " + to);

        // stacktrace points on next line 
        char[] copy = new char[newLength];

        System.arraycopy(original, from, copy, 0,
                         Math.min(original.length - from, newLength));
        return copy;
    }

Run Code Online (Sandbox Code Playgroud)

我怀疑这种锁定与 GC 有关系,但找不到任何相关信息。我在哪里可以阅读有关此主题的更多信息?

活动的最终目标:了解在这种情况下发生了什么,影响这一点的巫术因素以及我们如何减少此类操作的锁定时间。

评论中的一些细节:

  1. 爪哇 8
  2. 堆 512Mb
  3. GC-G1
  4. 通过实验我发现,锁定时间随着堆大小的增加而减少。

java performance garbage-collection locking jfr

4
推荐指数
1
解决办法
167
查看次数

标签 统计

garbage-collection ×1

java ×1

jfr ×1

locking ×1

performance ×1