From fe7d3dac421bfa5fb80de1210a13c954e2a90a35 Mon Sep 17 00:00:00 2001 From: Robert Toyonaga Date: Fri, 7 Nov 2025 15:37:43 -0500 Subject: [PATCH] adjust global buffer defaults --- .../com/oracle/svm/core/jfr/JfrOptionSet.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrOptionSet.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrOptionSet.java index a4a73eb3eb24..881cdaa7861f 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrOptionSet.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrOptionSet.java @@ -75,12 +75,28 @@ public JfrOptionSet() { } public void validateAndAdjustMemoryOptions() { + maybeAdjustDefaults(); ensureValidMinimumSizes(); ensureValidMemoryRelations(); adjustMemoryOptions(); assert checkPostCondition(); } + /** + * We expect that Native Image executables will require lesser defaults than JFR on the JVM. So + * to reduce JFR native memory consumption, we use lower default values. We should not adjust + * default values too early (at build time) because if any settings are user defined, we + * shouldn't change any values. + */ + private void maybeAdjustDefaults() { + if (!globalBufferSize.isUserValue() && !globalBufferCount.isUserValue() && !memorySize.isUserValue()) { + globalBufferSize.setValue(globalBufferSize.defaultValue / 2); + globalBufferCount.setValue(globalBufferCount.defaultValue / 2); + // Update record of total size + memorySize.setValue(globalBufferSize.getValue() * globalBufferCount.getValue()); + } + } + private void ensureValidMinimumSizes() { if (memorySize.isUserValue() && memorySize.getValue() < MIN_MEMORY_SIZE) { throw new IllegalStateException("The value specified for the JFR option 'memorysize' is too low. Please use at least " + MIN_MEMORY_SIZE + " bytes.");