Java x86和aarch64下预取CopyIntervalinBytes的默认值不同

Java x86和aarch64下预取CopyIntervalinBytes的默认值不同,java,jvm,arm,arm64,Java,Jvm,Arm,Arm64,x86下预取CopyIntervalinBytes的默认值为576(9*dcache\u行),而aarch64下的默认值为192(3*dcache\u行)。 它解释了为什么在src/hotspot/cpu/x86/vm_version_x86.cpp中,PrefetchCopyIntervalInBytes的默认值为576 // Prefetch settings // Prefetch interval for gc copy/scan == 9 dcache lines. Deriv

x86下预取CopyIntervalinBytes的默认值为576(9*dcache\u行),而aarch64下的默认值为192(3*dcache\u行)。 它解释了为什么在src/hotspot/cpu/x86/vm_version_x86.cpp中,
PrefetchCopyIntervalInBytes
的默认值为576

// Prefetch settings

  // Prefetch interval for gc copy/scan == 9 dcache lines.  Derived from
  // 50-warehouse specjbb runs on a 2-way 1.8ghz opteron using a 4gb heap.
  // Tested intervals from 128 to 2048 in increments of 64 == one cache line.
  // 256 bytes (4 dcache lines) was the nearest runner-up to 576.

  // gc copy/scan is disabled if prefetchw isn't supported, because
  // Prefetch::write emits an inlined prefetchw on Linux.
  // Do not use the 3dnow prefetchw instruction.  It isn't supported on em64t.
  // The used prefetcht0 instruction works for both amd64 and em64t.
但为什么没有解释arm的此选项的默认值


那么aarch64的这个值是如何确定的呢?

一个有趣的问题-能够提供更多的代码来源的上下文吗?它是从哪里来的。我从一位arm的jvm开发人员那里得到了一个确认的答案。这个值是通过基准测试调优确定的。我想这将非常取决于它是哪一个aarch64部分-这肯定是由系统的内存架构决定的有趣的问题-它将能够提供更多的代码来自何处的上下文?它来自何处。我从一位arm的jvm开发人员那里得到了一个确认的答案。该值是通过基准测试调优确定的。我想这将非常取决于它是哪一个aarch64部分-这肯定是由系统的内存体系结构控制的