From f04e47a8223826a0832612a3fbc76d14e59cb2fc Mon Sep 17 00:00:00 2001 From: Tomas Hurka Date: Fri, 9 Feb 2024 11:41:30 +0100 Subject: [PATCH] GH-555 use FileChannel.MapMode.PRIVATE on macOS aarch64 --- .../lib/jfluid/heap/AbstractLongMap.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/visualvm/libs.profiler/lib.profiler.heap/src/org/graalvm/visualvm/lib/jfluid/heap/AbstractLongMap.java b/visualvm/libs.profiler/lib.profiler.heap/src/org/graalvm/visualvm/lib/jfluid/heap/AbstractLongMap.java index 07acfbfc21..0ff314ea05 100644 --- a/visualvm/libs.profiler/lib.profiler.heap/src/org/graalvm/visualvm/lib/jfluid/heap/AbstractLongMap.java +++ b/visualvm/libs.profiler/lib.profiler.heap/src/org/graalvm/visualvm/lib/jfluid/heap/AbstractLongMap.java @@ -205,6 +205,18 @@ private static boolean isLinux() { return osName.endsWith("Linux"); // NOI18N } + private static boolean isMacOS() { + String osName = System.getProperty("os.name"); // NOI18N + + return "Mac OS X".equals(osName); // NOI18N + } + + private static boolean isAarch64() { + String osArch = System.getProperty("os.arch"); // NOI18N + + return "aarch64".equals(osArch); // NOI18N + } + abstract Entry createEntry(long index); abstract Entry createEntry(long index,long value); @@ -379,7 +391,7 @@ public void force() throws IOException { private static class MemoryMappedData extends AbstractData { - private static final FileChannel.MapMode MAP_MODE = isLinux() ? FileChannel.MapMode.PRIVATE : FileChannel.MapMode.READ_WRITE; + private static final FileChannel.MapMode MAP_MODE = computeMapMode(); //~ Instance fields ------------------------------------------------------------------------------------------------------ @@ -439,6 +451,12 @@ private static MappedByteBuffer createBuffer(RandomAccessFile file, long length) return channel.map(MAP_MODE, 0, length); } } + + private static FileChannel.MapMode computeMapMode() { + if (isLinux()) return FileChannel.MapMode.PRIVATE; + if (isMacOS() && isAarch64()) return FileChannel.MapMode.PRIVATE; + return FileChannel.MapMode.READ_WRITE; + } } private static class LongMemoryMappedData extends AbstractData {